Excel VBA程序开发自学宝典
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4 使用VBA帮助

Excel的VBA具有详尽地帮助供用户学习、参考。通过帮助可以使用户学得更快,对对象、属性、方法等功能也掌握更准确。

2.4.1 利用帮助学习VBA语法

VBA有三种帮助:即时提示、本地帮助和在线帮助。

1.即时提示

即时提示是指用户录入代码时,VBA弹出的选项,也称快速信息。它可以对属性、对象、方法和参数等进行提示,使用户可以快速而准确地录入代码。例如需要输入获取单元格地址的代码,但又无法确定记忆中的单词是否正确,就可以借用提示来完成。通过快速信息录入代码不仅快速,而且绝对正确。具体步骤如下:

01 录入代码“Range ("A1")”;

02 继续录入一个半角状态下的小数点,程序弹出即时信息——下拉列表,其中“Address”即表示区域的地址,如图2.7所示;

03 按下键盘上的下箭头,移动到“Address”处再按下Tab键,完整的单词即自动追加到代码中。如果手工录入,可能会录入为诸如“Adress”或者“Addrees”等等错误代码。

如果在代码中录入函数,及左括号时,仍然会产生即时帮助信息提示。不过不是下拉列表,而是所有参数的提示,及每个参数的类型,如图2.8所示。

图2.7 即时帮助之属性提示

图2.8 即时帮助之参数提示

2.本地帮助

本地帮助是指安装Office时安装的帮助文件,存放在本地磁盘中。

调用本地帮助的步骤如下:

01 打开Excel 2007,利用快捷键【Alt+F11】打开VBA编辑器;

02 按下快捷键【F1】打开VBA帮助窗口。窗口的标题是Excel帮助,与在工作表中按下【F1】键调出的帮助窗口标题一致,然而其功能却大大不同;

03 在帮助窗口右下角可以看到“脱机”二字,表示当前调用的帮助信息是本地帮助。在左上角的文字框中输入待了解的信息“names”,并单击回车键或者左键单击“搜索”按钮,立即出现关于“names”的所有帮助信息,包括“names”的对象、方法、属性和实例。从窗口中可以看出关于“names”的帮助有30条,本页仅显示1到25条;

04 单击第三项“Workbook.Names”,窗口中立即出现工作簿级名称集合的相关帮助信息,包括语法、说明和示例,如图2.10所示;

05 如果需查看关于“names”的其他帮助,则单击工具栏的 图标返回,再从列表中选择目标帮助信息,也可以单击“下一页”按钮查看其他帮助。

图2.9 调用names的本地帮助

图2.10 Workbook.Names的帮助

3.在线帮助

在线帮助是指来自网络的在线信息。单击帮助窗口右下角的“脱机”,将弹出“连接状态”提示框,如图2.11所示。从中选择“显示来自Office Online的内容”即可调用在线帮助。

在图2.12中显示了关于“names”的在线帮助。

图2.11 调整为显示在线帮助

图2.12 显示关于names的在线帮助

当然,除了上述三种帮助外,还可以到国内外的Office论坛获取专家们的在线指导。例如Excelhome论坛(http://club.excelhome.net)、Officefans论坛(http://www.officefans.net/cdb/index.php)或者太平洋软件论坛Office专区(http://softbbs.pconline.com.cn/f251.html)等。

2.4.2 捕捉错误

VBA对代码出错时具有良好的捕捉功能,可以提示用户代码有误,甚至给出错误类型、突出标示错误语句,对于部分错误还会提示或者定位于出错的代码上,使用户可以及时更正。

错误捕捉体现在编译错误和运行时错误两方面。

1.编译错误

编译错误指在VBA内部无法编译代码时产生的错误,大部分在编写代码时就能出现编译错误的提示,而不需要等到执行代码。

产生编译错误时,VBA会进行提示,让用户对有误的代码做修正。现列举四个编译错误,其中红色代码表示出错的语句。

(1)按下快捷键【Alt+F11】进入VBE窗口,单击菜单【插入】\【模块】,然后在模块代码窗口中输入以下代码“Sub 11()”,当敲下回车键后,VBA会弹出一个错误提示,如图2.13所示。该错误是使用了不正确的标识符作为宏名称引起的,宏名称不以数字开头。

(2)在模块代码窗口中输入代码“Sub我的宏()”,然后回车,程序会自动将Sub程序的外壳补充完整,成为:

      Sub 我的宏()
      End Sub

然后在中间录入以下语句:

      IF [a1]=10

当敲下回车键后,立即弹出图2.14所示错误提示,它表示IF语句未录入完整。完整的代码应是IF…Then…或是If...GoTo...,不是仅仅有IF而忽略Then。

图2.13 错误提示1

图2.14 错误提示2

(3)将前面代码中的修改“if [a1]=10”修改为“Range(“a1”)=10”,当敲下回车键后立即弹出如图2.15所示的错误提示。该提示表示代码中使用了无效字符,其中无效字符指的是全角双引号,Range的参数只能使用半角双引号。

(4)将前面代码中的修改“Range(“a1”)=10”修改为“Mid([a1])=1”,当敲下回车键后立即弹出如图2.16所示的错误提示。该提示表示Mid函数的参数不全,也就是缺少逗号分隔符“, ”。在[a1]后面加两个逗号就可以消除错误。

图2.15 错误提示3

图2.16 错误提示4

2.运行时错误

运行时错误是指代码编写时无法判断,在执行程序时才出现的错误。下面举四例运行时错误。

(1)在模块代码窗口录入以下代码,表示获取第11个工作表的表名:

      Sub 取表名()
      MsgBox Sheets(11).Name
      End Sub

如果当前工作簿中工作表数量不足11个,那么按下【F5】键执行程序时,将产生图2.17所示的错误提示。其中下标越界表示引用了不存在的对象,工作表仅三个时引用第11个就会越界。

图2.17 运行时错误1

(2)在模块代码窗口录入以下代码,表示给Z2048576单元格填充红色背景。

      Sub 填充红色()
      Range("Z2048576").Interior.ColorIndex = 3
      End Sub

录完代码后,按下【F5】键执行程序,立即弹出图2.18所示错误提示。因为Excel 2007最多1048576行,不存在Z2048576这个单元格,所以对该单元格进行任何操作都会失败。

图2.18 运行时错误2

(3)在模块代码窗口录入以下代码,用于将当前表数据区域的字体大小修改420磅。

      Sub 设置字体大小()
        ActiveSheet.UsedRange.Font.Size = 420
      End Sub

录完代码后,按下【F5】键执行程序,立即弹出图2.19所示错误提示。因为字号只支持1到409之间,而代码中的420已经超过Excel的允许范围,所以报错。

(4)在模块代码窗口录入以下代码,用于统计A列数字个数。

      Sub 计算A列数字个数()
          Dim i As Byte
          i = WorksheetFunction.Count(Range("A:A"))
          MsgBox "A列数字个数为:" & i
      End Sub

录完代码后,按下【F5】键执行程序,如果A列有1000个数字,那么会立即弹出图2.20所示错误提示。代码中变量i为byte类型,那么它只能表示0到255之间的数值,当A列数字个数超过255个时就会产生错误提示。

图2.19 运行时错误3

图2.20 运行时错误4

根据以上分析,Excel VBA有着完善的错误捕捉功能,用户的代码不管在运行前还是运行后产生错误,都可以通过错误提示帮助用户获取错误信息。不仅知道代码中存在错误,而且可以明确地看到错在哪一句代码。例如在“计算A列数字个数”这段代码中,当产生错误提示框时,单击“调试”按钮,程序会将出错的代码行黄色显示,且在其左方用箭头标示,如图2.21所示。

图2.21 标示错误语句

以上错误捕捉功能需要在设置好的前提下才可以发挥作用。在下一章中,将重点介绍VBE环境及其选项设置。