VBA

VBA
  • 一,概述
  • 二, 宏
  • 三,使用控件设计用户界面
  • 四,使用VB编辑器
  • 五,VBA语法基础
  • 六,VBA对象模型
  • 七,模块
  • 八,测试与错误处理
  • 九,VBA的安全性和保护工具
  • 十,VBA程序的部署
  • 十一,VBA高级应用
  • 参见

    一,概述

    VBA(Visual Basic For Applications)是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。VBA是Visual Basic的一个子集,VBA不同于VB,原因是VBA要求有一个宿主应用程序才能远行,而且不能用于创建独立应用程序。而VB可用于创建独立的应用程序。VBA可使常用的过程或者进程自动化,可以创建自定义的解决方案,最适用于来定制已有的桌面应用程序。

     

    通常意义上的VBA就是在Office中包含着的一种加强Office功能的Basic语言。经过发展,在Office中,Word、Excel、Access、PowerPoint?四个软件都有了自己的程序设计语言,分别称为WordBasic?、ExcelBasic?、AccessBasic?、PowerPointBasic?(在Outlook中的开发语言为Visual Basic Scripting Edition)。通常统一称为VBA(VB for Application)。

     

    二, 宏

     

    宏是能够自动完成某个任务的一组指令,这些指令放在一起就如同一个命令一样。宏与Dos中的批处理文件一样。批处理文件用于自动化用户完成的一组任务。VBA把需要重复进行的任务创建宏,并编写其它涉及决策的任务的代码以完成任务自动化,最后可以把这个过程保存成文件并发布。

     

    录制宏比从头开始编写代码要快得多。在实际开发中,为节省时间可以先录制尽可能多的宏,用它来建立应用程序的基础,然后再对录制下来的代码进行修改。

     

    1,录制宏:在VBA中,可以采用宏录制器或编程的方式自动处理任务。不必了解宏录制器使用的编程语言,便可以在VBE编辑宏。通过记录完成任务的步骤,或者在VBA中编程,都可以创建宏。Office应用程序,例如word、Excel、PowerPoint?、Access和Outlook都支持宏。Office应用程序提供的创建宏的工具是Macro Recorder(宏录制器)和VB编辑器。宏录制器用于自动化重复的任务,而VB编辑器自动化那些涉及决策的任务。可以给宏指定符号(工具栏上的图标)、键(键盘上的键)或名字,用于表示一列命令、活动或击键。

     

    录制宏有两种方式,一是双击状态栏中的"录制"命令,或者鼠标单击工具/宏/录制新宏命令,WORD等将记录下您的操作并转换为VBA语言。

     

     

    2,修改宏:

     

    A, 指定快捷键:

     

    B, 指定宏的保存位置:Excel可保存宏到个人宏工作簿中

     

    C, Excel可将宏指定给按钮(视图|工具栏|窗体|点选按钮到页面|指定宏)/图片(插入|图片|右击图片|指定宏)/工具栏按钮(工具|自定义|命令|宏|自定义...|拖动自定义按钮到工具栏|右击按钮可编辑图标和指定宏|关闭自定义...)

     

    三,使用控件设计用户界面

     

    首先要进行需求分析:应用程序的客户是谁,使用的数据的来源,数据保存在哪,对数据怎么操作,输出结果是什么?然后根据用户需求来添加控件(标签,按钮,复选框,选项按钮,列表框,组合框,滚动条控件,微调控件。)使用工作表还是用户窗体完全取决于个人的爱好和应用程序的用户。熟练Excel用户适合以工作表的形式工作。初级用户适合使用用户窗体。

     

    1, 向工作表添加控件: 视图|工具栏|窗体|点选控件到工作表|右击工作表上的控件选设置控件格式。通过使用控件、设置格式和公式,可以执行一些简单的自动化任务(至少对你的用户来说是这样)。

     

    2, 向用户窗体添加控件:

     

    (1)添加用户窗体: 打开一个新的工作簿|工具|宏|VBE|VBE的工具栏上的“插入用户窗体”按钮(或者选择“插入|用户窗体”,显示出新添加的用户窗体)

     

    (2)设置用户窗体的Name(一般前缀推荐取frm),Caption等属性

     

    (3)添加控件到用户窗体上:只要从工具箱中选择想要使用的控件,然后使用鼠标把控件拖到窗体上就可以了。

     

    (4)设置控件的Name,Caption和其它相关属性:控件Name命名前缀规范:复选框chk,组合框cbo,命令按钮cmd或者btn,分组框grp或者fra,图像img,标签lbl,列表框lst,多页(MultiPage?)mul,选项按钮opt,引用编辑(RefEdit?)ref,滚动条hsb或者vsb(取决于是水平的还是垂直的),微调项spn,选项卡条(TabStrip?)tab,文本框txt,切换按钮tog

     

    A, 命令按钮Default属性:一个窗体上只有一个命令按钮的Default属性可以设置为True。把Save(保存)/Cancel?(取消)按钮的Default属性设置为True。在窗体上当按下回车键时,窗体将执行保存/取消操作。

     

    B,控件的尺寸调整为一致并对齐:同时选中两个控件|点工具栏上“宽度相同”按钮旁边的向下箭头|选'两者都相同'|点“对齐”工具栏按钮旁边的向下箭头|选'左对齐',

     

    C,禁用控件:把Enabled(启用)属性设置为False就可以禁用控件。

     

    D,为控件分配Tab键切换顺序:设置TabIndex?属性值,可以从第一个控件起设置其TabIndex?为0,1,2..,也可以从最后一个控件起逆序设置每个TabIndex?为0(原理:当把某个控件的TabIndex?属性值设置为0时,其他所有控件的TabIndex?属性值都会加1)

     

    E,为控件分配加速键(键盘访问键):在控件的标题字母中找出一个作为该控件的加速键,把该字母赋值给控件的Accelerator属性,当设置完成以后,控件标题中该字母下会有下划线

     

    (5)运行用户窗体: 按F5键

     

    四,使用VB编辑器

     

    VBE(Microsoft Visual Basic Editor,Visual Basic 编辑器,VB编辑器)就是我们设计/调试VBA代码的编辑器,它是捆绑在Application(如WORD)应用程序中的一个程序。进入VBE的方式:ALT+F11;工具/宏/Visual? Basic 编辑器命令;工具/宏/宏对话框,创建或者编辑命令,也可以进入Visual Basic 编辑器

     

     

    1, 使用工具栏

     

    2, 浏览代码功能:编辑|查找或替换;书签标注需要查错,添加代码,更新或升级的代码区域。

     

    3, 使用在线帮助:帮助|Microsoft Visual Basic帮助

     

    4, 使用对象浏览器:单击标准工具栏上的“对象浏览器”按钮。/选视图|对象浏览器/按F2键。

     

    5, 设置编辑器选项:工具|选项|编辑器选项卡|自动显示快速信息,自动语法检测等

     

    五,VBA语法基础

    VBA语法基础

     

    六,VBA对象模型

    VBA对象模型

     

    七,模块

     

    作为一个单元保存在一起的定义、过程、函数和事件处理程序的集合称为模块。每个应用程序都是模块的集合。模块充当了项目的基本构件。它们是存储代码的容器。如果统筹安排模块内的代码,将有利于维护、调试和重复使用代码。如下共有三种类型的模块:

     

    1,用户窗体: 是用于为应用程序提供用户界面,采用.frm扩展名存储的用户窗体。窗体模块包含窗体中的所有控件及其属性。也可以为窗体和控件指定常量和变量声明、过程以及事件过程。窗体模块中的所有声明都默认是Private(私有),不能在窗体外访问。

     

    2,标准模块: 是用于存储通用过程,以便其他模块中的过程可以调用,采用.bas扩展名存储的代码模块。它们包含常量、类型、变量、过程和函数的声明。标准模块中所有声明都默认是Public(公共的),可以在模块外全局访问。当录制宏时,如果不存在该模块,Excel会自动为你创建。如果愿意,也可以添加附加的模块。Excel和VBA并不关心过程位于哪个模块中,只要过程位于打开的工作簿中即可。

     

    3,类模块: 类模块的使用方式与窗体模块相似。两者之间惟一差别是类模块中不包含可见组件。使用类模块可以创建自己的对象。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。要为每个类编写代码,必须使用类模块。窗体是类模块的示例。窗体是指包含属性(如字体、名称和标题)、方法(如单击)、预定义行为的对象。当创建窗体时,它会成为代码的独立模块。同样,所有控件,例如命令按钮和文本框,都是它们各自类的对象。

     

    变量命名前缀规范:

     

    数据类型短前缀长前缀
    A r r a yaa r y
    B o o l e a nfb i n
    B y t ebb i t
    C u r r e n c ycc u r
    D a t e / Ti m ed tdtm/d a t
    D o u b l edd b l
    I n t e g e rIi n t
    L o n gll n g
    O b j e c too b j
    S i n g l e?s n g
    S t r i n gss t r
    Va r i a n tvv a r

     

     

    八,测试与错误处理

     

    1,测试:

     

    (1)测试代码,检查它是否正确。为确保代码能够正常作用,必须在指定时间周期内采用不同的样本数据运行它。

     

    (2)如果代码没有按照预想方式正常作用,就需要调试它。可以用VBA提供的调试工具调试代码。

     

    (3)尽力模拟代码运行的不同环境,并检查其正确性。重点是检查代码的可移植性。

     

    (4)在成功地测试了代码之后,可以对观察到的现象进行存档,例如代码末正常运行的环境。

     

    2,错误类型:Error(错误,可捕获并用代码处理)并非Bug(程序错误,无法捕获)

     

    A, 语法错误(如输入时关键字或标点符号拼写错误)

     

    B, 编译错误(如使用对象的方法时,该对象并不支持这个方法)

     

    C, 运行期间错误(如除0、打开或关闭并不存在的文档、关闭未打开的文档)

     

    D, 逻辑错误(逻辑锗误是最难查找的错误类型,它们是由程序中使用的逻辑引起的。它们并不显示任何错误消息,所以不能提供错误线索及发生的位置。然而,有时,它们会产生运行期间错误,以便确定已经产生锗误的语句。如果编写了模块代码,而且该代码包含很多函数,而且一个函数调用另一个函数,那么不得不调查所有过程,以识别错误位置。)

     

    3,调试工具:要确保代码中的变量和表达式按照预想的方式运行,可以使用VBA中的各种调试工具跟踪它们。VBE有如下不同的调试工具。

     

    (1) 中断模式:

     

    A, 进入中断模式方法:在过程的开始位置按下F8键。/使用断点(F9键或者单击当前空白指示器栏)。/使用Stop语句。/当过程运行时,按下Ctrl+Break键。/使用运行期间错误MsgBox?对话框 。

     

    B, 退出中断模式方法:从Run(运行)菜单中选择"Run Sub|Userform"〔运行子过程/用户窗体);或者按下F5键,或者单击Debug工具栏上的"Run Sub|Userform"按钮。/从Run菜单中选择Reset(重新设置)选项,或者单击Debug工具栏上的Reset按钮

     

    (2) 单步执行过程:

     

    A, 单步执行过程:从Debug菜申中选择StepInto?(逐语句)选项/单击Debug工具栏上的StepInto?按钮按下F8键

     

    B, 跳过过程(跳过已测试无误的过程节省时间):从Debug菜单中选择Step 0ver选项/按下Shint+F8键/单击Debug工具栏上的Step Over按钮

     

    C, 跳出过程(跳过程剩余部份):从Debug菜单中选择stepOut选项/按下Ctrl十shift十F8键/单击Debug工具栏上的StepOut?按钮

     

    D, 运行到光标处(跳过一组语句):从Debug菜单中选择RugToCursor?选项/按下Ctrl+F8键

     

    E, 设置下一条语句为光标所指语句(要警惕会忽略不执行中间的语句):从Debug菜单中选择Set Next Statement/或者按下Ctrl十F9键。

     

    F, Sbow Next Statement选项指明下一个将要执行的语句是什么。当需要在Code窗口中监视很多过程、却丢失了跟踪时,这个特征就显得非常有用。

     

    (3) 监视过程。

     

    A, Locals(本地)窗口(显示当前过程中使用所有变量及其值,还会显示当前加载窗体和控件的属性。):从V1ew (视图)菜单中选LocalsWindow?选项/单击Debug工具栏上的localswindow按钮

     

    B, CallStack?对话框(查看所有活动的过程调用):从View菜单中选CallStack?选项/按下Ctrl+L键/ 单击Debug工具栏上的CallStack?按钮

     

    C, Immediate(立即)窗口(可查询并设置变量值,创建或撤销对象,执行单行命令如Debug.print [outputlist]):从View菜单中选择ImmediateWindow?选项/按下Ctrl+G键/单击Debug工具栏上的ImmediateWindow?按钮

     

    D, Watches窗口(是一个调试工具,在中断模式下可使用它更改变量和表达式的值,以查看不同的值如何影响代码):从View菜单中选择WatchWindow?选项/单击Debug工具栏上的WatchWindow?按钮参考:

     

    E, Auto Data Tips(自动显示数据提示)工具:Too1s(工具)菜单中选择Options(选项)Editor(编辑器)选项卡中的Auto Data Tips选项。就可以激活变量值自动显示(即在中断模式期间,只需把光标放在code窗口中的变量之上,该变量的值会自动以提示的方式显示出来。)

     

    4,预防错误

     

    A, 使用注释

     

    B, 缩进代码:Tab键或启用Too1s(工具)菜单选Options(选项)Editor(编辑器)选项卡中的Auto Indent(自动缩进)

     

    C, 使代码模块化

     

    D, 显式声明变量:使用Option Explicit语句,或启用Too1s(工具)菜单选Options(选项)Editor(编辑器)选项卡中的Require variable Declaration(需声明变量)复选框。

     

    E, 避免使用变体Variant(当某变量可能包含NULL值时就只能惟一指定Variant类型了)

     

    F,打开语法检查:启用Too1s(工具)菜单选Options(选项)Editor(编辑器)选项卡中Auto Syntax Check(自动语法检测)

     

    G,谨防Dim陷阱:Dim mystr1, mystr2 As String '并未声明mystr1变量

     

    5, 错误处理:调试只能够发现可以预测的错误,要处理不可预测的和不可避免的错误时,就必须使用错误处理。通过启用错误处理,捕获并提示错误处理,可以使程序更健壮。就可以使应用程序更稳定、更健壮。如果应用程序中包含了好几个过程,那么可以考虑采用集中式错误处理程序。

     

    (1) 捕获错误:On Error Goto line (On Error Goto 0会在当前过程禁用错误处理程序) 在这个语法中,line指定了发生运行期间错误时控制将跳转到的代码行

     

    Private  sub  calcuLate()
    0n  error  goto  validate_error
    iresult  =  inuml/inum2
    Print  iresult
    Exit Sub
    validate_error:
    Msgbox "Runtime  error - division by zero"
    End  Sub
    

     

    (2) 编写错误处理程序:给用户显示错误信息;提示补救方法;允许继续或取消操作。使用Err对象:
    属性说明
    Number存储最后一个错误的数字ID。这是默认属性
    Description存储说明错误的有关信息
    Source包含发生了错误的对象名或应用程序名
    HelpFile?包含帮助文件的名字
    HelpContextID?包含错误号对应的帮助上下文ID
    LastDLLError?包含最后一次调用DLL的系统错误代码

     

    Raise方法可以让用户自定义错误处理信息,还可把错误处理信息传回调用过程: Err.Raise number[, source, description, helpFile, helpContext]

     

    Clear方法清除Err对象的所有属性值:Err.Clear (当调用On Error, Exit Sub, Exit Function, Exit Property, Resume 等语句时,会自动调用Err.Clear方法。)

     

    (3) 退出错误处理程序:

     

    A, 0n error Resume:当错误处理程序已经修复错误后,可以用它来返回控制给引起错误的语句。但注意如果错误还在的话,会引起无限循环。

     

    B, 0n error Resume Next:忽略错误语句,继续下一句

     

    C, Resume [LineLabel?]: 把控制传递给行标号(必须和Resume语句处在同一个过程中)所在点的语句

     

    D,也可使用Exit Sub或者Exit Function甚至End语句退出已产生错误的过程,但这些语句应放在错误处理程序之前,这样当未产生错误时就不会执行错误处理程序。

     

    (4), 创建集中式错误处理函数程序:只需创建一次,就可反复使用

      

  • '添加一个模块创建一个函数,命名为HandleErrors
    Function HandleErrors(iErrNum) As Integer
    Select Case iAction
    Case 5
    'Invalid procedure call
    MsgBox Error(iErrNum) & " Contact Help Desk."
    iAction = 2
    Case 7
    'Out of memory
    MsBox "Close all unnecessary applications. "
    iAction = 1
    Case 11
    'Division by zero
    MsgBox "Zero is not a valid value. "
    iAction = 1
    Case 48, 49,51
    'Error in loading DLL
    MsgBox iErrNum & "Contact Help Desk. "
    iAction = 5
    Case 57
    'Device I/O error
    MsgBox "Insert Disk in Drive A."
    iAction = 1
    Case Else
    MsgBox "Unrecoverable Error. "
    iAction = 5
    End Select
    ErrorHandler = iAction
    End Function
    '在另一模块的ErrorExample过程中使用HandleErrors函数
    Private Sub ErrorExample ()
    Dim sngValue As Single, sngDivideBy As Single, sngAnswer As Single
    Dim iResponse As Integer
    On Error GoTo ErrorZone
    s n g Value = InputBox("Enter the number you wish to divide: ")
    sngDivideBy = InputBox("Enter the number you wish to divide by: ")
    sngAnswer = sngValue / sngDivideBy
    MsgBox "The answer is " & sngAnswer
    Exit Sub
    E r r o r Z o n e :
    'This Select statement uses the value returned
    'from the HandleErrors function for its condition.
    Select Case HandleErrors(Err)
    '对应于五种处理方法:Resume/Resume Next/Resume “行”/退出该过程/结束整个应用程序。
    Case 1
    Resume
    Case 2
    Resume Next
    'This procedure doesn't need case 3 which is resuming to a line.
    Case 4
    Exit Sub
    Case 5
    End
    End Select
    End Sub
     

    九,VBA的安全性和保护工具

     

    1, 数字签名:保护在VBA中编写的宏、过程、窗件或代码。也可以把它应用于文档、模板和内插附件。把数字签名添加到宏项目中的步骤如下:打开VBE >Tools菜单上的Digital Signture(数字签名)命令 >单击Choose(选择)指定数字证书。

     

     

    2, 指定安全级别:Tools工具 >Macro宏 >Security安全性。可以指定Security LeveI?(安全级别)和Trusted Source(信任源)

     

    3, 代码的密码保护:打开VBE >Tools >Project 属性,写人密码锁定代码查看

     

     

    十,VBA程序的部署

     

    不管是加载宏程序还是一般的电子表格程序,其部署都很简单,我们可以直接拷贝这个文件到目标机,对于加载宏,需要在Excel 中将其加载,对于后者,可以直接双击使用Excel打开运行。而对于应用VSTO 开发的Office 应用,其程序的存储位置位于独立的文件和DLL。另外,如前文所述,我们也可以将一些算法、代码通过COM 对象封装在独立的DLL 内,在Excel 内通过VBA 调用。对于此类代码,需要在部署前安装和注册相应的(COM)对象。

     

    如果在VBA 代码里使用了其他文件中的资源,如数据、配置信息等,在发布和部署时需要一起发布,对于这些文件资源的位置,可以通过Application 对象获取当前文件或加载宏的所在目录,然后通过目录的相对路径来调用。

     

    例如,当前文件的路径为:Application.ActiveWorkbook?.Path;加载宏的路径则通过以下方法来获取:Application.AddIns?.Item([加载宏名称]).Path

     

    对于有多个文件的程序包,可以使用安装工具制作安装包,也可以通过直接Copy 的方式来部署。

     

    十一,VBA高级应用

     

    VBA高级应用

     

    * VBA病毒:VBA是众多臭名昭著的宏病毒和基于Outlook的邮件病毒的主要技术!宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,宏病毒就会被激活。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染病毒的文档,病毒又会转移到他的计算机上。

     

     

    参见

     

    ACCESS中国

     

    以 Office 为开发平台时所需掌握的知识

     

    http://www.excelhome.net/

     

     

    http://www.officefans.net/,http://www.officeren.cn/已废弃  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值