Excel VBA入门(七)注释、宏按钮及错误处理

系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容。

1. 注释

代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什么意思有何用处,在关键点加上代码注释是很有必要的。如果要让别人也能看懂自己的代码,那么注释更是不可或缺的。

VBA中有两种注释的方法,其一是使用单引号,另一种是Rem。在单引号后面或Rem后面的所有内容,在程序运行时都不会被执行,它们就是注释的内容。通常注释的内容会被用其它颜色标识。如下:

Excel VBA入门(七)注释、宏按钮及错误处理

有点不方便的是,貌似VBA里面并没有提供多行注释的方法,要想把多行代码注释掉,只能在每一行前面都加上单引号或者Rem

在程序写得比较长的时候,就有必要在其中加入注释。注释通常应使用于:

  • 逻辑复杂的地方
  • 调用自定义的函数或过程
  • 每个函数和过程的开头。描述本函数和过程的作用

还有其它一些作者认为应当写上注释的地方。每行都注释肯定是多余的,但不写注释,通常也是不对的。什么时候该写,什么时候不写,只有要自己用得多了之后,才会清楚。

2. 宏按钮

前面所讲的所有代码案例,都是在VBE里面执行的(无论是通过单击运行按钮还是快捷键F5),但这样明显是不方便的。一是每次都需要打开VBE甚至要定位到某一个过程中,才可以执行,二是如果不懂VBA操作的人,则完全不知该如何执行了。

在Excel菜单栏-开发工具中,找到“插入”,点击它可发现有“表单控件”和“ActiveX控件”,这里使用的是第一个,表单控件。它的第一个,就是按钮。点击一下这个按钮,则可以在Excel表格中通过鼠标的拖动来放置一个按钮对象。如果使用的是表单控件中的按钮,则在放开鼠标后,会马上弹出一个指定宏的对话框:

Excel VBA入门(七)注释、宏按钮及错误处理

当然这时也可以不指定,点取消即可。后面有需要时,通过右键单击这个按钮,选择指定宏也可以达到同样的效果。

Excel VBA入门(七)注释、宏按钮及错误处理

其实理论上来说,VBA中的过程,或者说Excel中的宏,可以指定给Excel中的各种对象实体,比如插入的图片、各种形状,甚至在Excel中的生成的图表,都是可以作为宏执行的载体的。

我通常都通过插入形状来设置按钮,因为形状更加美观,可以设置它的各种格式,和Excel表格配合更为协调,不影响整体版面。用如下方式插入一个自己喜欢的形状:

Excel VBA入门(七)注释、宏按钮及错误处理

在其中加入提示文字并设置好格式后,就可以右键单击它,选择“指定宏”来把相应的VBA过程赋给它:

Excel VBA入门(七)注释、宏按钮及错误处理

有兴趣的朋友,可以尝试学习使用ActiveX控件。通过鼠标拖放一个ActiveX控件后,右键单击它,查看代码,留意代码上方左右两个对象窗口,点击右边的下拉列表可以发现这个控件可以有很多事件,例如单击、双击、鼠标移入、鼠标移出、被选中时等

Excel VBA入门(七)注释、宏按钮及错误处理

3. 错误处理

当代码执行出错时,VBA提供了两种处理的方式:

  • On Error GoTo
  • On Error Resume Next

3.1 On Error GoTo

表示如果自本行开始后面的代码执行出错,则跳至指定位置继续执行。如:

Sub te4()
On Error GoTo con
Debug.Print "a" + 3
Debug.Print 8 - 5
con:
Debug.Print "error occur"
End Sub

示例中第2行设置了On Error GoTo con,即当第3行出错时,就跳到con标记处,执行自con后的代码。标记后面应加上冒号(:)。第3行中,用双引号包含的a是一个字符串,而3是一个数字,直接将字符串与数字相加是会出错的,所以这里会触发错误,第4行不会被执行到,程序会直接跳转到con处,执行后面的Debug.Print语句。程序输出error occur。

注意,如果把第3行和第4行交换位置,则程序会先输出8-5的结果(即3),再输出error occur。

3.2 On Error Resume Next

表示如果代码执行出错,则从出错代码的下一行代码继续执行。如:

Sub te3()
On Error Resume Next
Debug.Print 5 + 3
Debug.Print "a" + 3
Debug.Print "error occur"
End Sub

代码第3行执行正常,第4行将出错,于是直接执行第5行。所以程序的输出是:

8

error occur

最后要提醒的是,以上提到的两种错误处理的方法应尽量尽量少用。因为有错误应该去解决它,而不是跳过它。

作业:

\1. 执行以下代码,观察输出结果,务必结合输出结果理解代码的每一行及它的逻辑。

Sub test()
On Error GoTo con
Debug.Print 3 + 3
Debug.Print 5 * 5 con:
Debug.Print "error occur"
Debug.Print "Do you understand this all?"
End Sub

\2. 执行以下代码,观察执行结果,务必结合输出结果以错误提示理解代码的每一行及整个代码的逻辑。

Sub test1()

    On Error GoTo con
On Error GoTo 0
Debug.Print 3 + 3
Debug.Print "c" - 3
Debug.Print 5 + 5
con:
Debug.Print "error occur"
Debug.Print "Do you understand this all?"
End Sub

本系列教程其它文章

Excel VBA 入门(零)

Excel VBA 入门(一)数据类型

Excel VBA 入门(二)数组和字典

Excel VBA 入门(三) 流程控制1-条件选择

Excel VBA 入门(四)流程控制2-循环控制

Excel VBA 入门(五)Excel对象操作

Excel VBA 入门(六)过程和函数

Excel VBA 入门(七)注释、宏按钮及错误处理

Excel VBA 入门(八)单元格边框

Excel VBA 入门(九)操作工作薄

Excel VBA 入门(十)用户窗体开发

上一篇:Apache Commons-pool实现对象池(包括带key对象池)


下一篇:bzoj 3166 可持久化Tire