按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
NumOfCells,First_Name。(译者:中文也可以做为变量名称使用,但是,个人不建议使用中文)
技巧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数据类型
69
… 页面 86…
数据类型(名称) 大小(字节) 描述
Boolean 2 逻辑值True或False
Byte 1 0到255的整数
Integer 2 –32;768到32;767的整数
Long 4 –2;147;483;648到2;147;483;647的整数
Single 4 单精度浮点数值
负数:–3。402823E38到–1。401298E–45
正数:1。401298E–45到3。402823E38
Double 8 双精度浮点数值
负 数 : –1。79769313486231E308 到
–4。94065645841247E–324
正数:4。94065645841247E–324到1。79769313486231E308
Currency 8 (放大的整数(译者:整数除以10000得到的数值,参见VBA
帮助))使用在定点计算中:
–922;337;203;685;477。5808 到
922;337;203;685;477。5807
Decimal 14 +/–79;228;162;514;264;337;593;543;950;335没有小数
点;
+/–7。9228162514264337593543950335小数点后有28位数
字;
最小的非0数字是
+/–0。0000000000000000000000000001
Date 8 从100年1月1日到9999年12月31日的日期
String(变长字符串) 10字节+字 变长字符串最多可包含大约 20 亿 ( 2^31)个字符。
符串长度
String(定长字符串) 字符串长度 定长字符串最多可包含大约65;400 个字符。
Object 4 对象变量用来引用Excel中的任何对象
Variant(带数字) 16 最高范围到Double类型的任何数值
Variant(带字母) 22字节+字 和变长字符串的范围一样
符串长度
用户定义类型 成员所需的 每个成员的范围和它的数据类型的范围一致
(使用Type) 数值
4 如何产生变量
你可以通过一个专门的命令来声明变量从而产生一个变量,或者也可以直接在语句里使用变量(而
不需要声明)。当你声明变量时,你实际上让VB知道该变量的名称和数据类型,这叫做“强制显式
声明变量”。
如果你在使用变量前不告诉VB关于该变量的任何信息,你这是在含蓄地告诉VBA你想要创建这个变
量。没有明确声明的变量会自动地分配为Variant数据类型(参见表3-1)。虽然不声明变量很方便
(你可以随意创建变量,并且不用事先知道被赋值的数值的数据类型就可以赋值给该变量),但是,
它会导致很多问题,参见技巧3-4中要点。
技巧3-3 强制显式声明变量的好处
存
动更正变量名称。
技巧3-4 隐式声明变量的坏处
70
… 页面 87…
要浪费很多时间来做故障排除,然而,如果在过程前声明了变量,这些很容易避免
运行要慢一些,因为VB每次在处理这个变量时不得不检查数据类型。因为Variant可以储存任
何一种数据类型,VB不得不占用更多的内存来储存你的数据
5 如何声明变量
你可以使用关键字Dim来声明变量,Dim代表“Dimension”。关键字Dim后面紧跟变量名称,再后面
就是数据类型。假设你想让过程显示员工的年龄,你计算年龄之前,必须给过程提供员工的生日。
你可以这样做,声明一个叫DateOfBirth的变量:
Dim DateOfBirth As Date
注意,关键字Dim之后是变量名称(DateOfBirth)。如果你不喜欢这个名称,你可以自由地改为其
它的,只有你想用的名称不是VBA关键字之一就行。关键字As以及后面的表3-1其中的一个数据类
型,明确了该变量的数据类型。数据类型Date告诉VB变量DateOfBirth将会储存日期。
要储存员工的年龄,按下面方式声明变量Age:
Dim Age As Integer
变量Age将会储存今天和该员工生日之间年数的数字。因为年龄显示为整年,所以变量Age就被分配
为Integer数据类型。
你可能还想要你的程序追踪员工的姓名,因此需要声明另一个变量来保存员工的名和姓:
Dim FullName As String
因为词语“Name”已经在VBA占用的清单上,在你的VBA程序里使用它的话保证会有错误。将变量命
名为FullName并且将它声明为String类型(因为员工姓名是文本),来保存员工姓名。
技巧3-5 隐式声明变量
没有用Dim语句来明确声明的变量叫做隐式声明。这些变量自动会被分配一个数据类型Variant。它
们可以保存数字,字符串和其它信息类型。你可以通过在你VBA程序的任何地方,简单地赋值给一
个变量名称来创建一个变量。例如,你可以按下述方式来隐式声明变量:DaysLeft = 100
声明变量被认为是编程的好习惯,因为它使程序可读性增强并且帮助避免某些类型的错误。既然你
已经知道了如何声明变量,我们就来看一下使用它的一个程序:
Sub AgeCalc( )
‘variable declaration (变量声明)
Dim FullName As String
Dim DateOfBirth As Date
Dim Age As Integer
'assign values to variables (赋值给变量)
FullName = 〃John Smith〃
DateOfBirth = #01/03/1967#
'calculate age (计算年龄)
Age = Year(Now())…Year(DateOfBirth)
'print results to the Immediate window (在立即窗口里打印结果)
Debug。Print FullName & 〃 is 〃 & Age & 〃 years old。〃
End Sub
(译者:Debug是非常好的工具,它让对象在运行时将结果在立即窗口上显示)
变量在程序的开始部分就被声明了,从那里开始,它们就可以使用了。在上面的过程里,每个变量
声明在分开的行。如果你想,你也可以同时在一行里声明好几个变量,用逗号分开每个变量,例如:
Dim FullName As String; DateOfBirth As Date; Age As Integer
注意,关键字Dim只在变量声明行的开头出现了一次。
当VB执行变量声明语句时,它产生了有确切名称的变量,并且占用内存空间来储存它们的值,然后,
明确的值被赋给这些变量。如何给变量赋值?变量名称,之后是一个等号,等号的右边是你希望用
该变量储存的数据。这里你输入的数据必须是该变量声明的数据类型。文本数据应该使用引号包括
起来,而日期需要用井号#包括起来。VB使用DateOfBirth提供的数据来计算员工的年龄,并且将计
算结果储存到Age这个变量。员工的姓名和年龄通过指令Debug。Print打印到立即窗口。当程序运行
71
… 页面 88…
结束后,