就象现实生活中一样,编程中也是有些事情必须马上做,而其它的事情可以稍后进行。当你推迟一件事情,你可以将它放入你心里的或纸上的“要做的事情”清单。清单上零零散散的事情,经常按照它们类型或者重要性来分类。当你将任务交给别人或者最终你要开始做了,你需要将该任务从清单里划掉。本章将演示你的VBA过程如何记住一些重要的信息,后面将用在你的语句或计算里。你将学习过程如何保留不断地往变量输入“要做的事情”,如何声明变量,以及它们和数据类型及常量有何关系。
对变量进行声明的好处
通常,在所有过程开头都放一个这样的语句: Option Explicit 它的作用是强制要求对所有的变量进行声明。这样做的好处在于: 1、易发现并修改变量名拼写错误。否则,VBA会认为其错误的拼写为一个新的Variant类型变量,并赋予其值为0或空(字符)。 2、可提高程序的执行速度,不必每一次在编译时都对变量进行检查。 3、可为对象变量自动列出可用的属性和方法列表,防止对属性和方法的拼写错误从而出现无效的方法和属性。建议在VBE编辑器中,选“工具——选项”,在“选项”框中的“编辑器”标签中选中“要求变量声明”前的复选框。
1保存VBA语句的结果
在第二章,你在立即窗口上输入一些VB指令,并且返回一些信息。例如,当你输入?Cells.Count,你发现工作表里有16,777,216个单元格。然而,当你在立即窗口之外的地方写VB过程时,你不能使用问号。当你忽略问号输入Cells.Count,VB不会突然停下来告诉你这个指令的结果。如果你想要知道某个指令执行后的结果,你就必须告诉VB记住它。在编程中,VB指令返回的结果可以赋值给变量。
2变量是什么
变量是一个简单的用来引用一条数据的名称。你每次想要记住一个VBA指令的结果时,考虑用一个名称来代表它。例如,如果你必须用数字16,777,216来提醒你工作表中的总单元格数目,你可以使用一个名称,如AllCells,NumOfCells,TotalCells,等等来代替。变量名称里可以包含字母,数字和一些标点符号,除了下面这些之外, # $ % & @ !变量的名称不可以以数字开始,也不可以含有空格。如果你想在变量名称里包含多于一个词语,可以使用下划线。虽然变量名称最多可以包含254个字母,但是,你最好使用短而简单的变量名称。使用短名称将会节省你的输入时间,如果你需要在你的VB过程里多次引用该变量的话。VB不管你在变量名称里使用大写字母还是小写字母,然而,大多数编程者使用小写字母,并且当变量名称包括一个或多个词语时,他们使用标题字母,那就是,象下面这样,他们将每个词语词头大写:NumOfCells,First_Name。(译者:中文也可以做为变量名称使用,但是,个人不建议使用中文)
- 1 -
技巧3-1 不能用作变量名称的词语 除了这些VBA占用了的词语之外,你可以使用任何你想用的标签作为变量名称。在VBA中有特定意义的VB语句以及其它某些词语不能用作变量名称。例如,词语Name,Len,Empty,Local, Currency或者Exit,如果你使用它们作为变量名,将会产生错误。 技巧3-2 富有意义的变量名称 给变量那种可以帮助你记住它们作用的名称。有些程序员使用前缀来识别变量类型。在你的代码中,一个以前缀“str”开头的变量名称(例如strName),很快就可以知道它是传递文本字符串的变量。 3数据类型 当你创建VB过程时,你脑海里必然有个目的,你想要处理数据。因为你的过程要处理不同类型的信息,所以,你应该了解VB如何储存数据。“数据类型”这个术语决定了数据如何储存在电脑的内存里。例如,数据可以储存为数字,文本,日期,对象,等等。如果你忘了告诉VB你的数据类型,VB将分配数据类型为“Variant”。“Variant”类型有能力解决数据本身的操作类型并且使用该类型。表3-1里列出了VB数据类型。除了内置的数据类型之外,你还可以定义你自己的数据类型。(你将在第八章里看到用户自定义的数据类型的例子。)因为不同的数据类型占据电脑内存的空间是不一样的,一些类型比另外一些更“贵”些,因此,为了保存内存并确保你的过程运行更快,你应该选择占用字节最少的,同时又能够处理你数据的数据类型。
表3-1 VBA数据类型 数据类型(名称) Boolean Byte Integer Long Single 大小(字节) 描述 逻辑值True或False 0到255的整数 –32,768到32,767的整数 –2,147,483,648到2,147,483,647的整数 单精度浮点数值 负数:–3.402823E38到–1.401298E–45 正数:1.401298E–45到3.402823E38 双精度浮点数值 负数:–1.79769313486231E308到–4.94065645841247E–324 正数:4.94065645841247E–324到1.79769313486231E308 (放大的整数(译者:整数除以10000得到的数值,参见VBA帮助))使用在定点计算中: –922,337,203,685,477.5808到922,337,203,685,477.5807 +/–79,228,162,514,264,337,593,543,950,335没有小数点; +/–7.9228162514264337593543950335小数点后有28位数字; 最小的非0数字是 +/–0.0000000000000000000000000001 - 2 -
2 1 2 4 4 Double 8 Currency 8 Decimal 14
Date String(变长字符串) String(定长字符串) Object Variant(带数字) Variant(带字母) 用户定义类型 (使用Type)
4如何产生变量
8 10字节+字符串长度 字符串长度 4 16 22字节+字符串长度 成员所需的数值 从100年1月1日到9999年12月31日的日期 变长字符串最多可包含大约 20 亿 ( 2^31)个字符。 定长字符串最多可包含大约65,400 个字符。 对象变量用来引用Excel中的任何对象 最高范围到Double类型的任何数值 和变长字符串的范围一样 每个成员的范围和它的数据类型的范围一致 你可以通过一个专门的命令来声明变量从而产生一个变量,或者也可以直接在语句里使用变量(而不需要声明)。当你声明变量时,你实际上让VB知道该变量的名称和数据类型,这叫做“强制显式声明变量”。
如果你在使用变量前不告诉VB关于该变量的任何信息,你这是在含蓄地告诉VBA你想要创建这个变量。没有明确声明的变量会自动地分配为Variant数据类型(参见表3-1)。虽然不声明变量很方便(你可以随意创建变量,并且不用事先知道被赋值的数值的数据类型就可以赋值给该变量),但是,它会导致很多问题,参见技巧3-4中要点。
技巧3-3 强制显式声明变量的好处 强制显式声明变量加速过程的执行。因为VB知道数据类型,它只会占用实际储存数据需要的内存 强制显式声明变量使你的代码可读性和可理解性增加,因为所有的变量都已列在过程的最前面 强制显式声明变量帮助预防由于变量名称拼写错误而导致的错误。VB根据变量声明里的拼写自动更正变量名称。 技巧3-4 隐式声明变量的坏处 如果你错误拼写了一个变量名称,VB会显示运行时间错误,或者产生一个新的变量。你保证需要浪费很多时间来做故障排除,然而,如果在过程前声明了变量,这些很容易避免因为VB不知道你要保存的变量的数据类型,它将分配给它Variant数据类型。这导致你的过程运行要慢一些,因为VB每次在处理这个变量时不得不检查数据类型。因为Variant可以储存任何一种数据类型,VB不得不占用更多的内存来储存你的数据 - 3 -
因篇幅问题不能全部显示,请点此查看更多更全内容