#014
2. VBA 简介 17
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
#015 Sub ByRefTest(var As Long) #016 var = var * 2 #017 End Sub
不过和变量不同,如果没有使用 Public、Private 显式指定,Sub 过程按缺省情况就是 公用的(Public),因此一定要注意把不打算公开的过程定义为私有的。 所有的可执行代码都必须属于某个过程。不能在别的过程中定义 Sub 过程。
Exit Sub 语句使执行立即从一个 Sub 过程中退出。程序接着从调用该 Sub 过程的语 句下一条语句执行。在 Sub 过程的任何位置都可以有 Exit Sub 语句。
在 Sub 过程中使用的变量分为两类:一类是在过程内显式定义的,另一类则不是。 在过程内显式定义的变量(使用 Dim 方法)都是局部变量(参加数据类型一节)。 过程(包括函数等)的创建可以通过在代码窗口直接键入“Sub…”来创建,也可以 使用菜单的“插入 - 过程”对话框来创建。
2.2.3. 函数
函数是具有返回值的过程,其正式描述如下:
[Public | Private][Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function
各部分含义同Sub 过程相同,在此不在重复。需要说明的是,函数要返回一个值,其 类型通过在定义时通过As Type 来定义,要从函数返回一个值,只需将该值赋给函数名。 在过程的任意位置都可以出现这种赋值。如果没有对 name 赋值,则过程将返回一个缺省 值:数值函数返回0,字符串函数返回一个零长度字符串 (\,Variant 函数则返回Empty。 如果在返回对象引用的Function 过程中没有将对象引用赋给name(通过 Set),则函数返 回Nothing。
VBA 中有大量内置函数,例如前边例子里使用过的MsgBox,InputBox。VBA 的函数
主要包括数学函数(包括三角函数、随机数等)、字符串函数等等,熟悉VBA 的内置函数
可以提高工作效率,更好的完成工作。对于VBA 的函数,可以参考其帮助文档。
2. VBA 简介 18
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
2.2.4. 调用过程和函数
从其它过程调用一个过程(Sub)时,必须键入过程名称以及任何需要的参数值。Call 语句可有可无,如果使用它,则参数必须以括号括起来。
可以使用 Sub 过程去组织其它的过程。在下面的示例中,Sub 过程Main 传递参数值 56 去调用Sub 过程MultiBeep(第2 行)。运行MultiBeep 后,控件返回Main,然后Main 调用Sub 过程Message(第3 行)。Message 显示一个信息框;当按“确定”键时,控件会 返回Main,接着Main 退出执行。 #001 Sub Main() #002 MultiBeep 56 #003 Message #004 End Sub #005
#006 Sub MultiBeep(numbeeps) #007 For counter = 1 To numbeeps #008 Beep #009 Next counter #010 End Sub #011
#012 Sub Message()
#013 MsgBox \#014 End Sub
下面的示例展示了调用具有多个参数的Sub 过程的两种不同方法。当第二次调用 HouseCalc 时,因为使用Call 语句(第3 行),所以需要利用括号将参数括起来。 #001 Sub Main()
#002 HouseCalc 99800, 43100
#003 Call HouseCalc(380950, 49500) #004 End Sub #005
#006 Sub HouseCalc(price As Single, wage As Single) #007 If 2.5 * wage <= 0.8 * price Then #008 MsgBox \#009 Else
#010 MsgBox \#011 End If #012 End Sub
在调用函数(Function)时,为了使用函数的返回值,必须指定函数给变量,并且用 括号将参数封闭起来;如下示例所示:
2. VBA 简介 19
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
Answer3 = MsgBox(\
如果不在意函数的返回值,可以用调用 Sub 过程的方式来调用函数。如下面示例所 示,可以省略括号,列出参数并且不要将函数指定给变量: MsgBox \
如果在上述例子中包含括号,则语句会导致一个语法错误。
2.3. 数据类型与变量
2.3.1. 常量和变量
变量用于保存在程序运行过程中需要临时保存的值或对象,变量具有不同的类型,例
如整型、浮点型(见后节),变量可能包含不同的数值,在程序运行时,变量的数值可以改 变。而当需要存储静态信息时,可以使用常量。使用常量有两个原因,(1)常量可以存放 数值供程序运行时多次引用而不改变;(2)使用常量可以增加程序的可读性,例如BookTitle 比“Excel 与VBA 程序设计”要容易记忆和修改。 定义变量可以使用 Dim 语句: Dim 变量名 As 数据类型
变量的名称变量名必须以字母开始,并且只能包含字母、数字和特定的特殊字符,不
能包含空格、句号、惊叹号,也不能包括字符@、&、$和#。名字最大长度为255 字符。 在 Dim 语句中不必提供数据类型。如果没有提供数据类型,变量将被指定为Variant
类型,因为VBA 中默认的数据类型是Variant。一般应该明确指定数据类型,因为这样程 序可读性更强;Variant 类型一般来说,要占用更多空间(16 字节),运行速度也会更慢一 些(根据不同数据类型,从基本无差别到大概慢0.5~1 倍6)。对于模块级别的变量,可以 使用Public、Private 来定义(见上节)。
变量定义中要特别注意的一个问题是,VBA 的变量定义,每个变量之后必须加“As 数 据类型”,例如: Dim i As Long, j As Long 而不可以这样:
6 本书所涉及的效率和速度快慢的说明虽然也参考了大量资料,但所有数据都经过笔者的测试,测试方法
见“其他话题”一章的“提高效率的一些建议”一节,一般都经过3-5 次测试,取平均结果。 2. VBA 简介 20
Excel 与VBA 程序设计 Copyright ? 2005 马维峰 Dim i, j As Long
这样,只有j 是Long 型,i 为__________Variant 型。
要声明常量并设定常量的值,需要使用 Const 语句。常量声明后,不能对它赋一个新 的数值。例如,假设需要声明一个常量来保存书本价格,可以使用如下语句: Const BOOKPRICE As Long = 23.50
可以在Const 语句中可以指定数据类型。常量的命名惯例是全部字母都用大写,这样 就容易区分代码中的变量和常量。
在 VBA 中,赋值表达式使用的是“=”,和比较表达式相同,可以通过表达式给变量 赋值,如果表达式左右两侧的数据类型不同,VBA 会尝试进行自动数据类型转换,如果无 法转换,会发生一个类型不匹配的运行时错误。例如运行如下程序代码,第一和第二个对 话框(5 和7 行)都可以显示,但第8 行的赋值会产生一个类型不匹配的运行时错误。 #001 Sub TestType() #002
#003 Dim i As Long #004 i = 1 #005 MsgBox i #006 i = 12.12 #007 MsgBox i #008 i = \#009 MsgBox i
#010
#011 End Sub
2.3.2. 数据类型
数据类型,指变量的特性,用来决定可保存何种数据。数据类型包括 Byte、Boolean、 Integer、Long、Currency、Decimal、Single、Double、Date、String、Object、Variant(默认) 和用户定义类型等。
表 2-3 显示所支持的数据类型,以及存储空间大小与范围。 表 2-3 VBA 的数据类型、存储空间大小、数值范围
数据类型 存储空间大小 范围 Byte 1 个字节 0 到 255
Boolean 2 个字节 True 或 False Integer 2 个字节 -32,768 到 32,767 2. VBA 简介 21
Excel 与VBA 程序设计 Copyright ? 2005 马维峰 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.79769313486232E308 Currency (变比整型)
8 个字节 从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 Decimal 14 个字节 没有小数点时为
+/-79,228,162,514,264,337,593,543,950,335,而小数点右 边有 28 位数时为 +/-7.9228162514264337593543950335; 最小的非零值为 +/-0.0000000000000000000000000001 Date 8 个字节 100 年 1 月 1 日 到 9999 年 12 月 31 日 Object 4 个字节 任何 Object 引用 String (变长) 10 字节加字符 串长度
0 到大约 20 亿
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Excel与VBA程序设计(mini)(4)在线全文阅读。
相关推荐: