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


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

    1. 注释

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

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

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

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

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

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

    2. 宏按钮

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

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

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

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

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

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

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

    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 入门(十)用户窗体开发

  • 相关阅读:
    python中获取当前位置所在的行号和函数名(转)
    Scrapy 轻松定制网络爬虫(转)
    XPath教程
    Scrapy入门教程(转)
    django safe 过滤器--不对字符串进行转义(转)
    WinDbg-如何抓取dump文件
    Windows系统默认调试器设置
    javascript(js)自动刷新页面的实现方法总结
    [HTML]不让TD中的文本撑开表格(转)
    apache 与 iis共存
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/vba_seven.html
Copyright © 2020-2023  润新知