图文详解:Excel 2016 编写简单VBA程序

打开Visual Basic编辑器

在Office 2016中,编写VBA代码、调试宏以及应用程序开发等都离不开Visual Basic编辑器,使用Visual Basic编辑器可以完成创建VBA过程、创建VBA用户窗体、查看或修改对象属性以及调试VBA程序等任务。下面来介绍Excel 2016启动VBA编辑器的两种方法。

方法一:启动Excel 2016,在“开发工具”选项卡中单击“代码”组中的“Visual Basic”按钮,如图25-19所示,可打开Visual Basic编辑器窗口。

图25-19 单击“Visual Basic”按钮

方法二:在“开发工具”选项卡的“代码”组中单击“宏”按钮打开“宏”对话框,在对话框中选择宏,单击“编辑”按钮,如图25-20所示,可打开Visual Basic编辑器窗口。

图25-20 单击“编辑”按钮打开Visual Basic编辑器

提示:实际上,在Office 2016中打开Visual Basic编辑器的方式很多,按“Alt+F11”键能够快速打开Visual Basic编辑器。在Excel 2016工作表标签上鼠标右击,在获得的关联菜单中选择“查看代码”命令,也能够打开Visual Basic编辑器。

轻松输入代码

Visual Basic编辑器的“代码”窗口的智能感应技术能够为开发者提供代码方面的帮助,如在输入代码时显示“属性/方法”列表、能自动显示参数信息以及自动生成关键字等功能。这些功能使程序设计者不再需要记忆大量的VBA函数和方法,使开发者能快速而高效地完成应用程序的编写。本节将以创建简单的Excel应用程序为例来介绍在“代码”窗口中编写程序的技巧。

步骤1:打开Visual Basic编辑器,选择“视图”|“工具栏”|“编辑”命令打开“编辑”工具栏。在代码编写时,如果需要获得对象、属性或方法提示,可以单击“编辑”工具栏的“属性/方法”按钮,打开一个列表框。在列表框中双击需要添加的内容即可将其直接添加到代码中,如图25-21所示。

图25-21 使用“属性/方法”列表

步骤2:在“代码”窗口输入代码,当输入对象名和句点后,VBA会自动给出一个下拉列表框,如图25-22所示。拖动列表框右侧的滚动条可以查看所有可用的属性和方法,双击需要的项目即可将其插入到程序中。如果在输入句点后继续输入属性或方法的前几个字母,VBA会在列表自动找到匹配的项目,此时按Enter键即可将其插入程序,同时程序的输入将另起一行。如果按空格键则将匹配项目插入程序但不换行。

图25-22 选择属性或方法

步骤3:在“代码”窗口中输入一个关键字的前几个字母,单击工具栏上的“自动生成关键字”按钮,则关键字后面的字母将会自动输入。如果与输入字母相匹配的关键字有多个,则Visual Basic编辑器会给出一个下拉列表,用户可以从中选择需要的关键字,如图25-23所示。

图25-23 生成关键字

提示:在出现“属性/方法”列表后,按Esc键将取消该列表。以后再遇到相同的对象,列表也将不会再出现。此时,如果需要获得“属性/方法”列表,可以按“Ctrl+J”键。也可右击,然后再单击弹出式菜单中的“属性/方法列表”命令。

步骤4:在“代码”窗口中输入VBA常数后,如果输入“=”,Visual Basic编辑器会自动弹出一个“常数列表”列表框,如图25-24所示。双击列表中的选项,即可将其值输入代码中。当在“代码”窗口中输入VBA指令、函数、方法、过程名或常数,单击“编辑”工具栏上的“快速信息”按钮,VBA会显示该项目的语法或常数的值,如图25-25所示。

图25-24 显示“常数列表”

提示:当显示“常数列表”后,可以使用键盘的方向键选择列表中的选项,按空格会将选择内容输入程序。如果按Esc键,将关闭该列表。单击工具栏中的“常数列表”按钮或按“Ctrl+Shift+J”键同样能够打开该列表。

图25-25 显示快速信息

步骤5:在“代码”窗口中输入VBA函数后,如果函数需要参数,在输入函数名和函数的左括号后,在光标下就会出现参数信息提示。这个提示将显示函数需要的参数,随着参数的输入,提示框会将当前需要输入的函数加粗显示,如图25-26所示。

图25-26 显示参数信息

使用对象浏览器了解VBA对象

使用对象浏览器,用户可以浏览工程中所有可获得的对象并查看它们的属性、方法以及事件,此外还可查看工程中可从对象库获得的过程以及常数。对象浏览器可以显示用户所浏览的对象的联机帮助,也可用搜索和使用用户所创建的对象,其他应用程序的对象也可用其来浏览。

步骤1:启动Excel,按“Alt+F11”键打开VBA编辑器。选择“视图”|“对象浏览器”命令打开“对象浏览器”窗口,在“对象浏览器”窗口的“工程/库”下拉列表中选择需要查询的对象库类型,如图25-27所示。

步骤2:在“类”窗口中选择需要查询的对象,此时在右侧将显示该对象的对象成员。选择一个对象成员,在“对象浏览器”窗口下方将显示该成员的定义,如图25-28所示。

图25-27 选择库类型

图25-28 显示对象成员及其信息

提示:在选择了一个对象成员后,在窗口下方将显示该成员的代码示例。同时还会包含一个超链接,单击该超链接可以跳转到对象成员所属的类或库。对于某些对象成员来说,也可以跳转到其上层类。

步骤3:在“对象浏览器”窗口的“搜索”栏中输入需要搜索的内容,单击“搜索”按钮,在“搜索结果”列表中将能够显示出所有的搜索结果。选择其中的一个选项,可以查看该对象的详细信息,如图25-29所示。

图25-29 显示搜索结果

提示:在“对象浏览器”中如果没有查询到需要的结果,可以按窗口工具栏上的“帮助”按钮,将打开“Excel帮助”窗口,使用该窗口可以获得更为详细的帮助信息。

代码的调试技巧

对于应用程序的开发,程序调试是一个重要步骤。VBA程序的调试有3种模式,它们是设计时、运行时和中断模式。Excel的Visual Basic编辑器提供了丰富的调试工具,包括断点调试、“立即窗口”、“本地窗口”和“监视窗口”等。下面对代码的调试技巧进行介绍。

步骤1:打开工作表并切换到Visual Basic编辑器,本示例的程序代码如下所示。在“代码”窗口中找到需要设置断点的语句,将光标放置到代码行中,选择“调试”|“切换断点”命令设置断点,如图25-30所示。

步骤2:按“F5”键运行程序,程序运行到断点位置即会暂停,同时标示处暂停位置,如图25-31所示。再次按“F5”键程序将继续运行。

图25-30 创建断点

图25-31 程序在断点处暂停

提示:鼠标在“代码”窗口边界标识条上单击可以直接创建断点。将插入点光标放置到程序中后,按“F9”键可以在该语句处添加断点,按“Ctrl+Shift+F9”组合键或选择“调试”|“清除断点”命令可以清除创建的断点。

步骤3:选择“视图”|“本地窗口”命令打开“本地窗口”对话框,按“F8”键逐语句执行程序。在运行到断点处时,“本地窗口”中将显示程序中表达式的当前值和变量类型,如图25-32所示。

图25-32 程序调试时“本地窗口”显示的内容

提示:“本地窗口”只有在中断模式下才能显示相应的内容,其只能显示当前过程中变量或对象的值,当程序从一个过程转到另一个过程时,其显示的内容也会相应发生改变。在“本地窗口”中,单击对象名称左侧的按钮可展开或收起对象的属性和成员列表。

步骤4:选择“视图”|“监视窗口”命令打开“监视窗口”对话框,选择“调试”|“添加监视”命令打开“添加监视”对话框,在“表达式”文本框中输入需要监视的条件,选择“当监视值为真时中断”单选按钮,单击“确定”按钮关闭对话框,如图25-33所示。

步骤5:再次打开“添加监视”对话框,在“表达式”文本框中输入变量名,单击“确定”按钮关闭对话框,如图25-34所示。

图25-33 添加监视条件

图25-34 添加第二个监视条件

步骤6:按“F5”键运行程序,程序将在满足条件(即i=50)时进入中断模式,“代码”窗口中指示出程序当前运行语句。同时在“监视窗口”中将可以看到监视变量的值,如图25-35所示。

图25-35 “监视窗口”中显示变量的变化

提示:如果需要编辑已有的监视条件,可以在“监视窗口”中选择某个监视条件后选择“调试”|“编辑监视”命令打开“编辑监视”对话框对监视条件进行编辑修改。在“监视窗口”中选择监视条件后,按Delete键可以将其删除。

步骤7:选择“视图”|“立即窗口”命令打开“立即窗口”对话框,在代码中添加“Debug.Print s”和“Debug.Print i”语句。按“F5”键运行程序,“立即窗口”中将显示变量s和变量i的运行结果,如图25-36所示。

图25-36 “立即窗口”中显示两个变量的值

提示:Debug是代码调试的一个重要工具,使用Debug对象的Print方法能使程序员在不暂停程序的情况下监控变量执行过程中的变化。Print方法在“立即窗口”中显示文本,Print方法显示的文本将不会在程序运行时看到,只能在“立即窗口”中显示。

步骤8:在“代码”窗口中为程序添加断点,运行程序后,在“立即窗口”中输入“?i”后按Enter键,立即窗口中将显示程序中断时变量i的值;输入“?s”后按Enter键,“立即窗口”中显示变量s的当前值,如图25-37所示。

图25-37 在“立即窗口”中显示变量的值

提示:“立即窗口”能够显示当前语境中变量或表达式的值,值可以通过Print方法或问号“?”来显示。这里要注意,“立即窗口”输出结果最多只有200行,超过200行则只显示最后200行的内容。

什么是宏和VBA?

“宏”,指一系列Excel能够执行的VBA语句。这样可能有些难以理解,如果说“将一块文字变为’黑体’,字号为’三号’”就可以看作一个“宏”的话,那么“宏”就不难理解了,其实Excel中的许多操作都可以是一个“宏”。

VBA是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要用来扩展Windows的应用程式功能,特别是Microsoft Office软件,也可说是一种应用程式视觉化的Basic脚本。在Excel中可以利用VBA使软件的应用效率更高,例如通过一段VBA代码,可以实现复杂逻辑的统计(比如从多个表中自动生成按合同号来跟踪生产量、入库量、销售量、库存量的统计清单)。