《ExcelVBA程序开发自学宝典》

上传人:新** 文档编号:478638633 上传时间:2023-08-30 格式:DOCX 页数:40 大小:472.01KB
返回 下载 相关 举报
《ExcelVBA程序开发自学宝典》_第1页
第1页 / 共40页
《ExcelVBA程序开发自学宝典》_第2页
第2页 / 共40页
《ExcelVBA程序开发自学宝典》_第3页
第3页 / 共40页
《ExcelVBA程序开发自学宝典》_第4页
第4页 / 共40页
《ExcelVBA程序开发自学宝典》_第5页
第5页 / 共40页
点击查看更多>>
资源描述

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

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

2、n函数过程(rngAsRange),EndFunctionPropertyGet属性过程()AsVariant,EndProperty本书主要讲述Sub子过程和Function函数过程的开发。Sub过程是VBA中应用最广的过程,录制宏所产生的过程就是Sub过程。Sub过程的执行方式包括五种。1.【Alt+F8】执行如果在工作表命令窗口、ThisWorkBook命令窗口或者标准模块窗口中存在Sub过程,那么在工作表界面可以通过快捷键【Alt+F8】来执行该过程。假设在VBE界面中的Sheet1代码窗口中有一个Sub过程“汇总”,在模块1中有一个名为“新建菜单”的Sub过程,那么通过快捷键【Alt

3、+F8】打开“宏”对话框后,将在对话框中产生两个可执行程序名,其中工作表命令窗口的Sub过程会连同工作表名一起出现在宏名列表中,而模块中的过程则仅仅列出过程名。用户选择目标程序并单击【执行】按钮即可启动Sub子过程。2. 快捷键执行Sub过程可以与某个快捷键进行关联,在后续的使用中就可以利用这个快捷键来调用对应的过程。设置Sub过程的快捷键主要有两种方式:利用宏对话框设置及用VBA代码指定。后者在本书其他章节将会讲述,在此演示一下“宏”对话框设置宏的快捷键的方法:假设VB工程中有两个名为“汇总”和“新建菜单”的Sub过程,在工作表界面中按下快捷键【Alt+F8】调出图6.1所示对话框,然后选择

4、“新建菜单”,并单击“选项”按钮,在弹出的“宏选项”对话框中指定快捷键,如图6.2所示。图中设计宏程序“新建菜单”的快捷键是【Ctrl+q】。图6.1“宏”对话框图6.2设置Sub过程的快捷键3. 按钮执行在工作表中建一个按钮,并将按钮与Sub过程关联,从而实现单击按钮执行程序。将按钮关联到Sub过程的步骤为:1. 单击菜单【开发工具】【表单控件】【按钮】;2. 在工作表中按下左键并向右下方拖动,从而绘制一个控件按钮;3. 在弹出的对话框中选择“新建菜单”,如图6.3所示;4. 返回工作表后即可单击名为“按钮1”的按钮来执行程序“新建菜单”。ExcelVBA程序开发自学1钮-按TnT去名追:成

5、归想J但蚩ft):用育打开的工作嘛0丽定图6.3关联过程与按钮4. 菜单调用最常见的是编写一个自定义菜单或者工具条来调用Sub过程。菜单与工具条的设计方法参见本书第19章及第20章。5. 事件引发对于部分需要自启动的程序,通常利用事件引发,不需要人工干预。例如工作簿开启时就自动执行某程序,或者关掉窗体、鼠标移过窗体时执行某程序,对于事件过程的运用参见本书第8章。6. 工作表中使用公式调用Function过程即自定义函数,可以像使用内置的工作表函数一样在公式中使用。调用Function过程的步骤如下:1. 单击菜单【插入】【模块】;2. 在模块中录入以下代码:Function成绩(rng)成绩=

6、IIF(rng=60,及格”,”不及格”)EndFunction=成绩(A1),正是期望的结果。3. 返回工作表中,在A1输入数值50,在B1输入公式:可以发现公式可以像内置函数一样运行,它返回“不及格”6.1.2插入过程的方式编写过程时可以手工录入代码,也可以让利用VBA提供的列表自动产生程序外壳。一个Sub过程分为程序外壳部分和主体部分。如图6.4所示。ExcelVBA程序开发自学ZE女t(第2版)Cptinctt外是部Sul新建单0CwmandBarsellControlsC新菜单”)DeleteithCoumm必七*11).ContTolls:AdJtL,Tmt).Cation篇新菜单

7、&.OnAelin=我的宏”.Styl-e=mBoBultenleoiLAiLdDapti.Faceld=11EndWithEndSub图6.4Sub过程的外壳与主体部分示意图其中外壳部分可以手工录入,也可以利用VBE提供的方式完成。1. 非事件过程对于非事件的Sub过程,VBA提供了一个专用窗体来选择性录入过程的外壳。具体步骤如下:1. 在VBE界面中单击菜单【插入】【模块】;2. 单击菜单【插入】【过程】打开“添加过程”对话框;3. 在“名称”框中录入“汇总”,并将“类型”选择“子过程”,将“范围”设为“私有的”,如图6.5所示。然后单击“确定”按钮。图6.5添加Sub过程外壳图执行以上程

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

9、驻(第2版)IU(3) 从对象窗口的下拉框中选择Worksheet”,代码窗口默认产生以下代码:PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)EndSub图6.6从下拉列表选择对象因为VBA默认状态下就是弹出Worksheet_SelectionChange”事件的代码,所以当选择对象为Worksheet”后就产生了需要的代码。如果需要录入Worksheet_Change”事件的代码,则需要在选择对象“Worksheet”后,再选择过程Change”,然后将产生的Worksheet_SelectionChange”事件的代码删除,

10、仅保留以下代码:PrivateSubWorksheet_Change(ByValTargetAsRange)EndSub对于此类包含参数的事件过程,应该尽量选择通过对象与过程窗口的下拉列表产生代码的方式,手工录入很容易产生误差。在用户窗体中很多事件也支持参数,而且有多个参数,通常也需要从列表中选择对象与过程的方式来录入代码。例如在窗体中录入鼠标移过事件的过程代码,步骤如下:1. 单击菜单【插入】【用户窗体】;2. 使用快捷键【Ctrl+g】显示工程资源管理器,并在UserForm1(或者别的名称)上单击右键,选择菜单【查看代码】;从对象窗口选择UserForm1”,此时默认产生UserForm

11、_Click”事件的代码;再从过程窗口选择MouseMove”,代码窗口中将产生以下代码:PrivateSubUserForm_MouseMove(ByValButtonAsInteger,ByValShiftAsInteger,ByValXAsSingle,ByValYAsSingle)EndSub3. 删除UserForm_Click事件的代码。6.1.3过程的命名规则过程的命名与变量的命名规则一致。但需要补充的一点是:过程名可以和本过程的私有变量同名,但却不能和公有变量同名。例如:Sub身份证()Dim身份证AsStringExcelVBA程序开发自学(第2版)身份证=a1.TextEn

12、dSub以上代码中过程与变量同名,但这是允许的。Dim身份证AsStringSub身份证()身份证=a1.TextEndSub这段代码却是非法的,只要运行程序就会弹出编译错误。为了避免错误及便于识别,需要使本过程的私有变量也尽量保持与过程名不相同。6.2编写Sub过程本节开始了解关于Sub过程的基本概念,以及编写简单的Sub过程。6.2.1 Sub过程的语法解析Sub过程即利用Sub语句声明的子过程。所有宏录制器产生的过程全是Sub过程,无法通过录制宏产生Function过程或者属性过程。Sub语句声明过程的语法如下:Private|Public|FriendStaticSubname(arg

13、list)statementsExitSubstatementsEndSub其中各参数的详细功能如表6-1所示。表6-1Sub语句参数详解参数部分功能解释Public可选的。表示所有模块的所有其他过程都可访问这个Sub过程。如果在包含OptionPrivate的模块中使用,则这个过程在该工程外是不可使用的Private可选的。表示只有在包含其声明的模块中的其他过程可以访问该Sub过程Friend可选的。只能在类模块中使用。表示该Sub过程在整个工程中都是可见的,但对对象实例的控制者是不可见的Static可选的。表示在调用之间保留Sub过程的局部变量的值。Static属性对在Sub外声明的变量不

14、会产生影响,即使过程中也使用了这些变量name必需的。Sub的名称;遵循标准的变量命名约定arglist可选的。代表在调用时要传递给Sub过程的参数的变量列表。多个变量则用逗号隔开statements可选的。Sub过程中所执行的任何语句组Sub过程与所有变量一样,也区分公有和私有,而在说法上稍有区别。过程分模块级过程和工程级过程。1. 模块级过程模块级过程即只能在当前模块调用的过程,它的特征有三个:(1) 声明Sub过程前使用Private;(2) 只有当前模块可以调用,例如在“模块1”中有以下代码:PrivateSub过程一()MsgBox123EndSubPrivateSub过程二()Ca

15、ll过程一EndSub执行过程二时可以调用过程一,但如果过程二存放于“模块2”中,则将弹出“子过程未定义”的错误提示。(3) 不出现在“宏”对话框中,即使用快捷键【Alt+F8】所打开的对话框中无法查看到当前过程的名称列表。如果是Function过程,则无法在函数向导中查看到函数名。提示:所有事件的代码都是过程级的,默认状态下只能在当前过程可以调用2. 工程级过程工程级过程是指在当前工程中任意地方都可以随意调用的过程。它的特征刚好与模块级过程相反:在“Sub”语句前置标识符“Public”、非当前过程可以调用,可以出现在“宏”对话框中。如果一个过程没有使用Public”和Private”标识,则默认为公有过程,任何模块或者窗体中都可以调用。Sub过程也支持参数,其参数的用法与Function过程的参数用法一致,本小节不详述,请参阅本书6.4节。3.Exitsub与End的作用与区别Su

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

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