《excel vba程序开发自学宝典(第2版)》

上传人:xzh****18 文档编号:36566120 上传时间:2018-03-30 格式:DOC 页数:59 大小:849.50KB
返回 下载 相关 举报
《excel vba程序开发自学宝典(第2版)》_第1页
第1页 / 共59页
《excel vba程序开发自学宝典(第2版)》_第2页
第2页 / 共59页
《excel vba程序开发自学宝典(第2版)》_第3页
第3页 / 共59页
《excel vba程序开发自学宝典(第2版)》_第4页
第4页 / 共59页
《excel vba程序开发自学宝典(第2版)》_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《《excel vba程序开发自学宝典(第2版)》》由会员分享,可在线阅读,更多相关《《excel vba程序开发自学宝典(第2版)》(59页珍藏版)》请在金锄头文库上搜索。

1、Excel VBA 程序开发自学 (第 2 版)第 06 章 编写 SUB 过程及开发函数VBA 的主体结构就是过程。VBA 包括子过程、函数过程和属性过程三种,本书主要介 绍子过程(也称 Sub 过程)和函数过程(也称 Function 过程) 。 本章要点本章要点 认识过程 Sub 过程 Function 过程 关于过程参数 开发自定义函数 编写函数帮助6.1 认识过程VBA 中每一个程序都包含过程。录制的宏是一个过程,一个自定义函数也是一个过程。 掌握好单个过程的编写思路,就可以组合成一个大中型插件或者专业程序。6.1.1 过程的分类与调用方式过程主要分为三类:子过程、函数过程和属性过程

2、。这三类过程的格式如下。Sub 子过程() End Sub Function 函数过程(rng As Range) End Function Property Get 属性过程() As Variant End Property 本书主要讲述 Sub 子过程和 Function 函数过程的开发。 Sub 过程是 VBA 中应用最广的过程,录制宏所产生的过程就是 Sub 过程。Sub 过程的执 行方式包括五种。1.【Alt+F8】执行如果在工作表命令窗口、ThisWorkBook 命令窗口或者标准模块窗口中存在 Sub 过程, 那么在工作表界面可以通过快捷键【Alt+F8】来执行该过程。Exce

3、l VBA 程序开发自学 (第 2 版)假设在 VBE 界面中的 Sheet1 代码窗口中有一个 Sub 过程“汇总” ,在模块 1 中有一个名 为“新建菜单”的 Sub 过程,那么通过快捷键【Alt+F8】打开“宏”对话框后,将在对话框 中产生两个可执行程序名,其中工作表命令窗口的 Sub 过程会连同工作表名一起出现在宏名 列表中,而模块中的过程则仅仅列出过程名。用户选择目标程序并单击【执行】按钮即可启 动 Sub 子过程。2.快捷键执行Sub 过程可以与某个快捷键进行关联,在后续的使用中就可以利用这个快捷键来调用对 应的过程。 设置 Sub 过程的快捷键主要有两种方式:利用宏对话框设置及用

4、 VBA 代码指定。后者 在本书其他章节将会讲述,在此演示一下“宏”对话框设置宏的快捷键的方法: 假设 VB 工程中有两个名为“汇总”和“新建菜单”的 Sub 过程,在工作表界面中按下 快捷键【Alt+F8】调出图 6.1 所示对话框,然后选择“新建菜单” ,并单击“选项”按钮,在 弹出的“宏选项”对话框中指定快捷键,如图 6.2 所示。图中设计宏程序“新建菜单”的快 捷键是【Ctrl+q】 。图 6.1 “宏”对话框 图 6.2 设置 Sub 过程的快捷键 3.按钮执行在工作表中建一个按钮,并将按钮与 Sub 过程关联,从而实现单击按钮执行程序。 将按钮关联到 Sub 过程的步骤为: 1.单

5、击菜单【开发工具】【表单控件】【按钮】 ; 2.在工作表中按下左键并向右下方拖动,从而绘制一个控件按钮; 3.在弹出的对话框中选择“新建菜单” ,如图 6.3 所示; 4.返回工作表后即可单击名为“按钮 1”的按钮来执行程序“新建菜单” 。Excel VBA 程序开发自学 (第 2 版)图 6.3 关联过程与按钮 4.菜单调用最常见的是编写一个自定义菜单或者工具条来调用 Sub 过程。菜单与工具条的设计方法 参见本书第 19 章及第 20 章。5.事件引发对于部分需要自启动的程序,通常利用事件引发,不需要人工干预。例如工作簿开启时 就自动执行某程序,或者关掉窗体、鼠标移过窗体时执行某程序 对于

6、事件过程的运用参见本书第 8 章。6.工作表中使用公式调用Function 过程即自定义函数,可以像使用内置的工作表函数一样在公式中使用。 调用 Function 过程的步骤如下: 1.单击菜单【插入】【模块】 ; 2.在模块中录入以下代码:Function 成绩(rng) 成绩 = IIF(rng = 60, “及格“, “不及格“)End Function 3.返回工作表中,在 A1 输入数值 50,在 B1 输入公式:=成绩(A1) 可以发现公式可以像内置函数一样运行,它返回“不及格” ,正是期望的结果。6.1.2 插入过程的方式编写过程时可以手工录入代码,也可以让利用 VBA 提供的列

7、表自动产生程序外壳。 一个 Sub 过程分为程序外壳部分和主体部分。如图 6.4 所示。Excel VBA 程序开发自学 (第 2 版)图 6.4 Sub 过程的外壳与主体部分示意图 其中外壳部分可以手工录入,也可以利用 VBE 提供的方式完成。1.非事件过程对于非事件的 Sub 过程,VBA 提供了一个专用窗体来选择性录入过程的外壳。具体步 骤如下: 1.在 VBE 界面中单击菜单【插入】【模块】 ; 2.单击菜单【插入】【过程】打开“添加过程”对话框; 3.在“名称”框中录入“汇总” ,并将“类型”选择“子过程” ,将“范围”设为“私有 的” ,如图 6.5 所示。然后单击“确定”按钮。图

8、 6.5 添加 Sub 过程外壳图 执行以上程序后在模块中可以看到产生的代码为:Private Sub 汇总()End Sub 如果是 Function 函数过程,也可以按照上述方法录入过程的外壳。2.事件类过程VBA 支持很多类事件,大部分事件的代码都需要参数。而这些参数是很难记忆的,包括 所有 VBA 专业程序员。为了快速且准确地录入事件类过程,可以通过 VBE 提供的对象与过 程窗口的下拉列表完成。 例如输入工作表 SelectionChange 事件的过程,方法如下: (1)使用快捷键【Alt+F11】进入 VBE 界面,并用快捷键【Ctrl+g】打开工程资源管理 器窗口; (2)双击

9、 Sheet1 或者其他需要录入工作表事件的工作表名;Excel VBA 程序开发自学 (第 2 版)(3)从对象窗口的下拉框中选择“Worksheet” ,代码窗口默认产生以下代码:Private Sub Worksheet_SelectionChange(ByVal Target As Range)End Sub图 6.6 从下拉列表选择对象 因为 VBA 默认状态下就是弹出“Worksheet_SelectionChange”事件的代码,所以当选择 对象为“Worksheet”后就产生了需要的代码。如果需要录入“Worksheet_Change”事件的代 码,则需要在选择对象“Works

10、heet”后,再选择过程“Change” ,然后将产生的“Worksheet_SelectionChange”事件的代码删除,仅保留以下代码:Private Sub Worksheet_Change(ByVal Target As Range)End Sub 对于此类包含参数的事件过程,应该尽量选择通过对象与过程窗口的下拉列表产生代码 的方式,手工录入很容易产生误差。 在用户窗体中很多事件也支持参数,而且有多个参数,通常也需要从列表中选择对象与 过程的方式来录入代码。例如在窗体中录入鼠标移过事件的过程代码,步骤如下: 1.单击菜单【插入】【用户窗体】 ; 2.使用快捷键【Ctrl+g】显示工程

11、资源管理器,并在 UserForm1(或者别的名称)上单击 右键,选择菜单【查看代码】 ; 3.从对象窗口选择“UserForm1” ,此时默认产生“UserForm_Click”事件的代码;再从 过程窗口选择“MouseMove” ,代码窗口中将产生以下代码:Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)End Sub 4.删除“UserForm_Click”事件的代码。6.1.3 过程的命名规则过程的命名

12、与变量的命名规则一致。 但需要补充的一点是:过程名可以和本过程的私有变量同名,但却不能和公有变量同名。 例如:Sub 身份证()Dim 身份证 As StringExcel VBA 程序开发自学 (第 2 版)身份证 = a1.TextEnd Sub 以上代码中过程与变量同名,但这是允许的。Dim 身份证 As String Sub 身份证()身份证 = a1.TextEnd Sub 这段代码却是非法的,只要运行程序就会弹出编译错误。 为了避免错误及便于识别,需要使本过程的私有变量也尽量保持与过程名不相同。6.2 编写 Sub 过程本节开始了解关于 Sub 过程的基本概念,以及编写简单的 Su

13、b 过程。6.2.1 Sub 过程的语法解析Sub 过程即利用 Sub 语句声明的子过程。所有宏录制器产生的过程全是 Sub 过程,无法 通过录制宏产生 Function 过程或者属性过程。 Sub 语句声明过程的语法如下:Private | Public | Friend Static Sub name (arglist)statementsExit Substatements End Sub 其中各参数的详细功能如表 6-1 所示。表 6-1 Sub语句参数详解参数部分功能解释 Public可选的。表示所有模块的所有其他过程都可访问这个 Sub 过程。 如果在包含 Option Priva

14、te 的模块中使用,则这个过程在该工程外是不可使用的 Private可选的。表示只有在包含其声明的模块中的其他过程可以访问该 Sub 过程 Friend可选的。只能在类模块中使用。表示该 Sub 过程在整个工程中都是可见的,但对对象 实例的控制者是不可见的 Static可选的。表示在调用之间保留 Sub 过程的局部变量的值。Static 属性对在 Sub 外声明 的变量不会产生影响,即使过程中也使用了这些变量 name必需的。Sub 的名称;遵循标准的变量命名约定 arglist可选的。代表在调用时要传递给 Sub 过程的参数的变量列表。多个变量则用逗号隔开 statements可选的。Sub

15、 过程中所执行的任何语句组 Sub 过程与所有变量一样,也区分公有和私有,而在说法上稍有区别。过程分模块级过 程和工程级过程。Excel VBA 程序开发自学 (第 2 版)1.模块级过程模块级过程即只能在当前模块调用的过程,它的特征有三个: (1)声明 Sub 过程前使用 Private; (2)只有当前模块可以调用,例如在“模块 1”中有以下代码:Private Sub 过程一()MsgBox 123 End Sub Private Sub 过程二()Call 过程一End Sub 执行过程二时可以调用过程一,但如果过程二存放于“模块 2”中,则将弹出“子过程 未定义”的错误提示。 (3)

16、不出现在“宏”对话框中,即使用快捷键【Alt+F8】所打开的对话框中无法查看到 当前过程的名称列表。如果是 Function 过程,则无法在函数向导中查看到函数名。提示:所有事件的代码都是过程级的,默认状态下只能在当前过程可以调用。2.工程级过程工程级过程是指在当前工程中任意地方都可以随意调用的过程。它的特征刚好与模块级 过程相反:在“Sub”语句前置标识符“Public” 、非当前过程可以调用,可以出现在“宏” 对话框中。 如果一个过程没有使用“Public”和“Private”标识,则默认为公有过程,任何模块或者 窗体中都可以调用。 Sub 过程也支持参数,其参数的用法与 Function 过程的参数用法一致,本小节不详述, 请参阅本书 6.4 节。3.Exit sub 与 End 的作用与区别Sub 过程可以在程序执行期间随时退出程序,通常是设定若干个条件。当满足条件时使 用“Exit Sub”语句来终止程序。 “Exit S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号