codecamp

怎么打断很长的VBA语句

尽管一行VBA代码最多可以包含1024个字母,但是,为了使你个过程容易阅读,最好将长的语句打断为两行甚至多行。VB使用一个专门的连续线(下划线)置于一行代码的末尾,表明下一行是这行的连续。例如:


Selection.PasteSpecial _
             Paste:=xlValues, _
             Operation:=xlMultiply, _
             SkipBlanks: =False, _

             Transpose:=False


这个连续符是下划线,你必须在下划线之后带一个空格。


你可以在下述几种情况中使用连续符:


1、运算符之前或者之后。例如:&,+,Like,NOT,AND

„

2、逗号之前或者之后


3、冒号和等号(:=)之前或者之后

„  

4、等号之前或者之后


你不可以在冒号和等于号之间使用连续符,例如,下面的代码VB是不认的:


Selection.PasteSpecial Paste: _
             =xlValues, Operation: _
             =xlMultiply, SkipBlanks: _
             =False, Transpose: _
             =False Selection.PasteSpecial Paste: _
             =xlValues, Operation: _
             =xlMultiply, SkipBlanks: _
             =False, Transpose: _

             =False


同样,在引号之内的文本之间加连续符也是不对的,例如,下面的下划线的使用是无效的:


MsgBox "To continue the long instruction, use the _

            line continuation character."


上面的指令应该打断为如下代码:


MsgBox "To continue the long instruction, use the " & _

             "line continuation character."


了解VBA错误

在编写或编辑VBA过程之中,无论你多么小心,出错的可能性还是很大的。例如,你可以错误拼写
一语句,放错了一个逗号或引号,或者忘记了一个句号或右括号。这些类型的错误称为句法错误。
幸运的是,VB比较容易帮助你发现这种类型的错误。为了让VB在你输入一行代码后,自动帮你检测
语法的正确性,你需要在VB窗口的“工具”-“选项”里,确保勾选了“编辑器”页上的“自动语
法检测”。

自动语法检测

图2-7 选项对话框的编辑器上的“自动语法检测”帮你检查VBA过程里的打字错误

错误
图2-8 这个错误由于漏掉了常数xlCellType前面的括号而产生

运行时间错误
图2-9 当VB试图在工作表或单元格区域里选择一个并不存在的单元格时,就会产生一个运行时间
错误

查找语法错误可能是烦人的并且费时的事情。有些语法错误只有在过程运行的时候才能被发现。在试图运行你的过程的时候,VB可能找到那种因为使用了无效的自变量,或者是漏掉了那些需要成对使用的指令如If语句和循环结构,而造成的错误。

技巧:程序调试
你很可能不只一次听过“计算机程序里充满了错误”。在编程里,错误就被称为“bug”(错误,漏洞),而“调试”(debug)则是给你的程序除错的过程。调试的第一步就是改正所有的语法错误。

VB提供了无数种工具,你可以使用它们来追踪和消除错误。在本章中,你将知道如何使用VB助手帮助你在编写程序时出现尽可能少的错误;在第十三章中,你将学习如何使用专门的调试工具来捕获你VBA程序里的错误。

除了语法错误外,还有其它两种错误:运行时间和逻辑。运行时间错误发生在过程运行的时候。图2-9显示了一种典型的运行时间错误。运行时间错误经常发生在那些程序员在编写代码的时候没有想到的情况。例如,当程序试图访问一个用户电脑上并不存在的驱动器或者文件,或者没有首先检查是否用户插入软盘并关闭软驱口而试图复制一个文件到软盘,这时就会发生运行时间错误。

第三种错误——逻辑错误,通常不会发出明确的错误信息。过程可能没有语法错误,甚至运行无误,然而,得到的却是错误的结果。逻辑错误通常非常难以查找,并且它藏得很隐秘,间歇发生,你不能指望花几个小时,甚至几天,就能找到错误源。

查找帮助

当你使用宏录制器时,你所有的操作都被翻译成VBA指令,并且放置在一个模块里。你在研究这些录制的过程时,不要忘记帮助随时可用。你会发现有些代码的意思可能会非常易懂,然而,有些却不怎么明白。这时候,你就需要寻求帮助了。当你独自工作时,只要轻轻一点或者轻轻一按就可以请教你的VBA老师了。使用VB在线帮助比使用词典或参考手册要快捷和容易得多。如果你讨厌一页一页地在词典里找你需要的术语,你将惊讶于你如何快地从VB代码窗口找到需要的帮助页面。

让我们来检查你如何通过内置的VBA老师的帮助,将WhatsInACell过程里的第一句变成你自己的VBA词汇:

Selection.SpecialCells(xlCellTypeConstants, 2).Select

上面的指令可以打断为三部分,哪些部分?Selection是对象还是属性?SpecialCells是什么?

Select是什么?要回答这些问题,请依照下面的操作:

1.  激活你要分析的过程的代码窗口

2.  点击你不懂的词语

3.  按下F1


图2-10 VBA的对象,属性和方法在在线帮助里解释得很详细

帮助就会显示相应的页面。如果你的光标放在词语“Selection”中间,你就会知道Selection可以是一个应用程序的属性,也可以是一个窗口对象。如果你的光标在下一个不明白的术语(SpecialCells)并且按上面的步骤再做一遍后,你将看到SpecialCells帮助屏幕(参见图2-10)。

注意,每个帮助主题包含许多信息。被查找的指令类型显示在帮助窗口的上面;指令的类型允许词语分类。例如,SpecialCells是方法,可以使用这个方法的对象名称列在“应用于”下面(点击“应用于”,出现对象名称列表)。指令名称下面的“参阅”和“示例”让你快速地跳到其它应用或意义相似的指令,以及查看使用这个指令的例子。指令的意义显示在“参阅”和“示例”标题的下面。接下来则是语法和需要的自变量和其它参数。“说明”部分给出一些推荐使用该指令的情
形。

你可以很容易地将示例中的代码复制到你的过程中去:选中你要复制的代码行,按下Ctrl+C,或者单击右键,选择快捷菜单上的“复制”,然后切换到VB代码窗口,点击你需要粘贴代码的地方,再按下Ctrl+V或者选择“编辑”-“粘贴”。

VBA对象、属性和方法
VBA语法和编程快捷助手
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }