【VB开源代码栏目提醒】:网学会员鉴于大家对VB开源代码十分关注,论文会员在此为大家搜集整理了“6 3、VBA程序设计基础 【精编】 - 医学卫生”一文,供大家参考学习
6.3.1 数据类型 6.3.2 常量、变量与数组 6.3.3 运算符与表达式 返回 VBA数据类型继承了传统的Basic语言如Microsoft QuickBasic。
在VBA应用程序中也需要对变量的数据类型进行说明。
VBA提供了较为完备的数据类型Access数据表中的字段使用的数据类型OLE对象和备注字段数据类型除外在VBA中都有对应的类型。
VBA数据类型、类型声明符、数据类型和取值范围如表6-5。
其中字符串类型又分为变长字符串String和定长字符串String length。
除了上述系统提供的基本数据类型外VBA还支持用户自定义数据类型。
自定义数据类型实质上是由基本数据类型构造而成的
一种数据类型
我们可以根据
需要来定义一个或多个自定义数据类型。
6.3.1 数据类型 表6-5 VBA
基本数据类型 VAB??????????????????ù??????????????????§??????????§??????????Byte????????02550Integer????????-32768327670Boolean????/??True????FalseFALSELong??¤????????-21474836482147483670·????ù????-3.402823E38-1.401298E-5??ù??ù????1.401298E-453.402823E38·????ù????-1.7200069313486232E308????-4.9406564841247E-324??ù??ù???? 4.9406564841247E-324????1.7
200069313486232E308Currency????????-922337203685????9223372036850String????????????·????????????????????¤??????÷??¨Data????????/????????January 1100???? December 3
199990Object????????Variant????????EmptySingle????????0Double????????0 1常量 2变量 3VBA数组 常量是指在程序运行的过程中其值不能被改变的量。
常量的使用可以增加
代码的可读性并且使
代码更加容易维护。
此外使用固有常量——Microsoft Access、Microsoft for Access
Applications等支持的常量可以保证既是常量所代表
的基础值在Microsoft Access版本升级换代后也能使
代码正常运行。
1 除了
直接常量即通常的数值或字符串值常量如123Lee等也称为字面常量外Microsoft Access还支持三
种类型的常量 符号常量用Const语句创建并且在模块中使用的常量 固有常量是Microsoft Access或引用库的一部分 系统定义常量True、False和Null。
1 通常符号常量用来代表在
代码中反复使用的相同的值或者代表一些具有特定
意义的数字或字符串。
符号常量的使用可以增加
代码的可读性与可
维护性。
符号常量使用Const语句来创建。
创建符号常量时需给出常量值在程序中
运行过程中对符号常量只能作读取操作而不允许修改或为其重新赋值也不允许创建与固有常量同名的符号常量。
下面的例子给出了使用Const语句来声明数值和字符串常量
的几种方法。
Const conPI3.14159265 可以使用conPI来代替常用的π值。
Private Const conPI2PI2 conPI2被声明为一个私有常量同时在计算它的值的表达式中使用不在它前面定义的符号常量。
私有常量只能在定义它的模块子程序或函数中使用。
Public Const conVersion Version Access conVersion被声明为一个公有字符串常量。
公有常量可以在整个应用程序内的所有子程序包括事件过程和函数中使用。
2固有常量 除了用Const语句声明常量之外Microsoft
Access还声明了许多固有常量并且可以使用VBA常量和ActiveX Data ObjectsADO常量。
还可以在其它引用对象库中使用常量。
Microsoft Access旧版本创建的数据库中的固有常量不会自动
转换为新的常量格式但旧的常量仍然可以使用而且不会
产生错误。
所有的固有常量都可在宏或
VBA
代码中使用。
任何时候这些常量都是可用的。
在函数、方法和
属性的“帮助”
主题中对用于其中的具体内置常量都有描述。
固有常量有两个字母前缀指明了定义该常量的对象库。
来自Microsoft Access库的常量以“ac”开头来自ADO库的常量以“ad”开头而来自Visual Basic库的常量则以“
vb”开头例如 acForm、adAddNew、vbCurrency 因为固有常量所
代表的值在Microsoft Access的以后版本中可能
改变所以应该尽可能使用常量而不用常量的实际值。
可以通过在“对象浏览器”中选择常量或在“立即”窗口中输入“固有常量名”来
显示常量
的实际值。
可以在任何允许使用符号常量或用户定义常量的
地方包括表达式中使用固有常量。
如果需要用户还可以用“
对象浏览器”来查看所有可用对象库中的固有常量列表。
如图6-15所示。
图6-15 固有常量查找 3
系统定义常量 系统定义的常量有三个True、False和Null。
系统定义常量可以在
计算机上的所有应用
程序中使用。
2 变量实际上是一个符号地址它代表了命名的存储位置包含在程序执行阶段
修改的数据。
每个变量都有变量名在其作用域范围内可唯一
识别。
使用前可以指定数据类型即采用显式声明也可以不指定即采用隐式声明。
1 变量名必须以字母字符开头在同一范围内必须是唯一
的不能超过255个字符而且中间
不能包含句点或类型声明字符。
虽然在
代码中允许使用未经声明的变量但一个良好的
编程习惯应该是在程序开始几行声明将
用于本程序的
所有变量。
这样做的
目的是为了避免数据输入的
错误提高应用程序的可维护性。
对变量进行声明可以使用类型说明符号、Dim语句和DefType语句。
① 使用类型说明符号声明变量类型 在
传统的
Basic
语言中允许使用类型声明符号来声明常量和变量的数据类型如varXyz是一个整型变量123则是一个整型常数。
类型声明符号在使用时始终放在变量或常数的末尾。
VBA中的类型说明符号有Integer、Long、Single、Double、String和Currency。
类型说明符号使用时是
作为变量名的一部分放在变量名的最后一个字符。
例如intX是一个整型变量douY是一个双精度变量strZ是个字符串变量。
在使用时不能将类型说明符号省略。
如 intX1243 douY45665.456 strZAccess Dim Dim语句使用格式为 Dim 变量名As 数据类型 例如 Dim strX As String 声明了一个字符串类型变量strX。
可以使用Dim语句在一行声明多个变量例如 Dim intXdouY strZ As Strring 表示声明了三个变量intXdouY和strZ其中只有
最后一个strZ声明为字符串类型变量intX和douY都没有声明其数据类型即遵循类型说明符号
规则认定为变体Variant类型。
在一行中声明多个变量时每一个变量的数据类型应使用as声明。
正确的声明方法如下 DimintX As Integer douY As Double strZ As String 最有效、值得提倡的做法是一行只声明一个变量。
使用Dim声明了一个变量后在
代码中使用变量名其末尾带与不带相应的
类型说明符号都代表同一个变量。
③ DefType语句 DefType语句只能用于模块级即模块的通用声明部分用来为变量和传送给过程的参数设置缺省数据类型
以及为其名称以指定的字符开头的Function和Property Get过程设置返回值类型。
DefType语句使用
格式如下 DefType 字母字母范围 例如 DefInt abe-h 说明了在模块中使用的以字母abe到h开头的变量不区分大小写的默认数据类型为整型。
表6-6列出了VBA中所有可能的DefType语句和对应的数据类型。
表6-6 DefType语句和相应的数据类型 ????????ù????????????????????DefBoolBoolean????????????DefBtyeByte????????DefIntInteger????????DefLngLong??¤????????DefCurCurrency????????DefSngSingle????????DefDblDouble????????DefDateData????????/????????DefStrString????????????DefObjObject????????DefVarVariant???????????? 声明变量数据类型可以使用上述三种方法VBA在
判断一个变量的数据类型时按以下先后顺序进行 I是否使用Dim语句 II是否使用数据类型说明符 III
是否使用DefType语句。
没有上述三种
方法声明数据类型的变量默认为变体类型Variant。
⑤用户自定义类型的声明与使用 用户自定义类型可以是任何用Type语句定义的数据类型。
用户自定义类型可包含一个或多个基本数据类型的数据元素、数组或一个先前定义的
用户自定义类型。
例如 Type MyType MyName As Stringl0 定义字符串变量存储一个名字。
MyBirthDate As Date 定义日期变量存储
一个生日。
MySex As Integer 定义整型变量存储性别 End Type 0 为女1 为男 上例
定义了一个
名称为“MyType”的数据类型。
MyType类型的数据具有三个域MyName、MyBirthDate和MySex。
在自定义数据类型时
应注意Type语句只能在模块级使用。
可以在Type前面加上Public或Private来声明自定义数据类型的作用域这与其它VBA基本数据类型相同。
声明自定义数据类型的域时如果使用字符串类型最好定长字符串如MyName As Stringl0。
使用Type语句声明了一个用户自定义类型后就可以在该声明范围内的任何位置声明该类型的变量。
可以使用Dim、private、Public、ReDim或Static来声明用户自定义类型的变量。
下面的例程说明了自定义数据类型的使用。
Option Compare Database ’自定义一个公共数据类型 Type MyType MyName As Stringl0 定义字符串变量
存储一个名字。
MyBirthDate As Date 定义日期变量存储一个生日。
MySex As
Integer 定义整型变量存储性别0 为女1 为男 End Type Sub useType Dim UdtXyz as MyType UdtXyz. MyName Xyz UdtXyz. MyBirthDate 75/12/17 UdtXyz. MySex 1 Debug.Print UdtXyz. MyName UdtXyz. MyBirthDate UdtXyz. MySex EndSub 例程先在通用声明中自定义了MyType数据类型然后在useType过程中使用它来声明Xyz为一个MyType数据类型变量。
2 在前面己经
学习了变量的三种声明方法对于变量
的作用域还须作明确的声明才能
确定。
在声明变最作用域时可以将变量声明为Locate本地、Private私有Module模块级或Public公共。
本地变量仅在声明变量的过程中
有效。
在
过程和函数
内部所声明的变量不管是否使用Dim语句都是本地变量。
本地变量具有在本地使用的最高优先级即当存在与本地变量同名的模块级的私有或公共变量时
模块级的变量则被屏蔽 私有变量在所声明的模块
中的所有
函数和过程都有效。
私有变量必须在模块的
通用声明部分使用“Private变量名As数据类型”进行声明 公共变量在所有模块的所有过程和函数都可以使用。
在模块通用声明中使用“Public变量名As数据类型”声明公共变量。
图9-2对私有变量和公共变量的声明
进行了示例并说明了作用
范围。
图6-16 变量
作用域 模块对象 模块A Public intA1 as integer Private intA2 as integer Sub A1 本地变量 私有变量 intA2
公共变量intA1 intB1 End Sub Sub A2 本地变量 私有变量 intA2 公共变量intA1 intB1 End Sub 模块B Public intB1 as integer Private intB2 as integer Sub B1 本地变量 私有变量 intB2 公共变量intB1 intA1 End Sub Sub B2 本地变量 私有变量 intB2 公共变量intB1 intA1 End Sub 变量的生命周期与作用域是两个
不同的
概念它是指变量从首次
出现执行变量声明为其分配存储空间到消失的
代码执行时间。
本地变量的生命周期是过程或函数调用被
开始调用到运行结束的
时间静态变量除外。
公共变量的
生命周期是从声明到整个Access应用程序结束。
对于本地变量的生命周期的一个例外是静态变量。
静态变量的声明使用“Static变量名As数据类型”。
静态变量在Access程序执行期间一直
存在它们的作用范围是声明它的子程序或函数。
静态变量可以用来计算
事件发生的次数或者是函数与过程被调用的次数。
3VBA 数组是由一组
具有相同数据类型的变量称为数组元素
构成的集合。
1数组的声明 在VBA中不允许隐式说明数组用户可用Dim语句来声明数组声明方式为 Dim 数组名数组下标上界 As 数据类型 如 Dim intArrayl0 As
Integer 这条语句声明了一个有10个元素的数组每个数组元素为一个整型变量。
这是只指定数组元素下标上界来定义数组。
在使用数组时可以使用Option Base来指定数组的默认下标下界是0或l。
默认情况下数组下标下界为0。
所以用户只需使用它来指定默认下标下界为l。
Option Base能用在模块的通用声明部分。
VBA允许在指定数组下标范围时使用To如下例所示 Dim intArray-3 to 3As Integer 该语句定义一个有7个元素的数组数组元素下标从-3到3。
如果要定义多维数组声明方式为 Dim 数组名数组第1维下标上界数组第2维下标上界… As 数据类型 如 Dim intArray 23As Integer 语句定义了一个二维数组第一维有3个元素第二维有4个元素。
在VBA中还允许用户定义动态数组。
动态数组的定义方法是先使用Dim来声明数组但不指定数组元素的个数。
而在以后使用时再用ReDim来指定数组元素个数称为数组重定义。
在对数组重定义时可以使用ReDim后加保留字Preserve来保留以前的值否则使用ReDim后数组元素的值会被重新初始化为默认值下面的例子说明了动态数组
的定义方法 Dim intArray As Integer ’声明部分 ReDim Preserve intAmal0 ’在过程中重定义保留以前的值 ReDim intArray l0 ’在过程中重新初始化 同样用户可以使用Public、Private或Static来声明公共数组、私有数组或静态数组。
2 数组声明后数组中的每个元素都可以当作单个的变量来使用其使用方法同相同类型的
普通变量。
其元素引用格式为 数组名下标值表 其中如果该数组为一维数组则下标值表为一个范围为数组下标下界数组下标上界的整数如果该数组为多维数组则下标值表为一个由多个不大于数组维数用逗号分开的整数序列每个整数范围为数组该维下标下界数组该维下标上界表示对应的下标值。
例如可以如下引用前面定义的数组 intAma2 引用一数组intAma的第3个元素。
intArray 00 引用二数组intArray的第1行第1个元素。
例如若要存储一年中每天的支出可以声明一个具有365个元素的数组变量而不是365个变量。
数组中的每一个元素都包含一个值。
下列的语句声明数组curExpense具有365个元素。
按照缺省规定数组的索引是从零开始所以此数组的上标界是364而不是365。
Dim curExpense364 As Currency 若要设置某个元素的值
必须指定该元素的索引即下标值表。
下面的示例对于数组中的每个元素都赋予一个初始值20。
Sub FillArray Dim curExpense364 As Currency Dim intI As Integer For intI 0 to 364 curExpenseintI 20 Next End Sub 1算术运算符与算术表达式 2字符串连接符与字符串表达式 3关系与逻辑运算符、逻辑表达式及其取值 4对象运算符与对象运算表达式 算术运算符是
常用的运算符用来执行
简单的算术运算。
VBA提供了8个算术运算符表6-7列出了这些算术运算符。
在8个算术运算符中除取负-是单目运算符外其它均为双目运算符。
加减-乘取负-等 1算术运算符与算术表达式 表6-7 算术运算符 ??????????????????????í????????ù??????·??ù????????XY????·??????????--X??????¨????????XY·????????ù??¨????????/X/Y??????ù??ù??¨????????XY????????????????ModX Mod Y??????¨????????XY??????¨????????-X-Y1 指数运算
指数运算用来计算乘方和方根其运算符为28表示2的8次方而21/2或 20.5是计算2的平方根。
2 浮点数除法与整数除法 浮点数除法运算符/执行标准除法操作其结果为浮点数。
例如表达式5/2的结果为2.5与
数学中的除法一样。
整数除法运算符执行整除运算结果为整型值因此表达式52的值为2。
整除的操作数
一般为整型值。
当操作数带有小数时首先被四舍五入为整型数或长整型数然后进行整除运算。
操作数必须在-2147483648.5214748367.5范围内其运算结果被截断为整型数Integer或长整数Long不再进行舍入处理。
3 取模运算 取模运算符Mod用来求余数其结果为第一个操作数整除第二个操作数
所得的余数。
表9-3按优先顺序列出了算术运算符。
在8个算术运算符中指数运算符优先级
最高其次是取负-运算符、乘、浮点除、整除/、加、减-。
其中乘和浮点除是同级运算符加和减是同级运算符。
当一个
表达式中含有多种算术运算符时必须严格按上述顺序求值。
此外如果表达式中含有括号则先计算括号内表达式的值有多层括号时先计算内层括号中的表达式。
字符串连接用来连接多个字符串字符串相加。
例如 AMy BHome CAB 运算结果为变量C的值为MyHome。
在VBA中“”既可用作加法运算符还可以用作字符串
连接符但“”专门用作 字符串连接运算符其作用与“”相同。
在有些情况下用“”比用“”可能更安全。
2字符串连接符与字符串表达式 1 关系运算符与关系表达式 关系运算符也称比较运算符用来对两个表达式的值进行
比较比较的结果是一个
逻辑值即真True或假False。
用关系运算符连接两个算术表达式所组成的表达式叫做关系表达式。
VBA提供了6个关系运算符如表6-8所示。
3关系与逻辑运算符、逻辑表达式
及其取值 表6-8 关系运算符
列表 ??????????????????????×??????í????????ù????????????XY????、