模块与VBA编程基础(3)

2019-07-30 13:16

定义变量最常用的方法是使用Dim?[As ]结构,其中,As后指明数据类型,或在变量名称后附加类型说明字符来指明变量的数据类型。这种方式是显式定义变量。 例如:

Dim New Var_1 As Integer ’NewVa为整型变量

Dim New Var_2% ,sun! ’NewVar_2为整型变量,sun为单精度型变量 Dim NewVar_2% ,sun!相当于Dim New Var_2 As Integer, sum As Single。 2.隐含声明

没有直接定义而通过一个值指定给变量名,或Dim定义中省略了As< VarType>短语的变量,或当在变量名称后没有附加类型说明字符来指明隐含变量的数据类型时,默认为Variant数据类型。如: Dim m,n, ’m、n为变体Variant变址

NewVar = 528 ’NewVar为Variant类型变见,值是528

二、强制声明

在默认愉况下,V8A允许在代码中使用未声明的变址.如果在模块设计窗口的顶部“通用-声明”区域中,加人语句: Option Explicit

强制要求所有变置必须定义才能使用。这种方法只能为当前模块设置了自动变置声明功

能,如果想为所有新模块都启用此功能。可以单击菜单命令“工具”下“选项”对话框中,选中“要求变量声明”选项即可。 三、变量的作用域

在VBA编程中,变量定义的位置和方式不同,则它存在的时间和起作用的范围也有所不同,这就是变量的作用域与生命周期。Visual Basic中变量的作用域有3个层次。 1.局部范围(Local)

变量定义在模块的过程内部,过程代码执行时才可见。在子过程或函数过程中定义的或直接使用的变量作用范围都是局部的。在子过程或函数内部使用Dim、Static?As关键字说明的变量就是局部范围的。 2.模块范围(Module)

变量定义在模块的所有过程之外的起始位置,运行时在模块所包含的所有子过程和函数过程中可见。在模块的通用说明区,用Dim、Static、Private?As关键字定义的变量作用域都是模块范围。 3.全局范围(Public)

变置定义在标准模块的所有过程之外的起始位置,运行时在所有类模块和标准模块的所有子过程与函数过程中都可见。在标准模块的变量定于区域,用Public?As关键字说明的变量就属于全局的范围。 变量还有一个特征,称为持续时间或生命周期。变量的持续时间是从变量定义语句所在子过程第一次运行,到程序代码执行完毕并将控制权交回调用它的过程为止的世界。每次子过程或函数过程被调用时,以Dim?As语句说明的局部变量,会被设定为默认值,数值数据类型为0,字符串变量则为空字符串("")。这些 局部变量,有着与子过程或函数过程登场的持续时间。

要在过程的运行时保留局部变量的值,可以用Static关键词代替Dim定义静态变量。静态(Static)变置的持续时间是整个模块执行的时间,但它的有效作用范围是由其定义为止决定的。

四、数据库对象变量

Access建立的数据库对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用。例如,Access中窗体与报表对象的引用格式为: Forms!窗体名称!控件名称[.属性名称]

或 Reports!报表名称!控件名称[.属性名称]

关键词Forms或Reports分别表示窗体或报表对象集合。感叹号“!”分隔开对象名称和控件名称。“属

性名称”部分缺省,则为控件基本属性。

如果对象名称中含有空格或标点符号,就要用方括号把名称括起来。 下面举例说明含有学生编号信息的文本框操作: Forms!学生管理!编号 =“980306”

Forms!学生管理![编号] =“980306” ’对象名称含空格时用[ ]

此外,还可以使用Set关键字来建立控件对象的变量。当需要多次引用对象时,这样处理是很方便。例如,要多次操作引用窗体“学生管理”上控件“姓名”中的值时,可以使用以下处理方式: Dim txtNameAs Control ’定义控件类型变量 Set txtName = Forms!学生管理!姓名 ’指定引用窗体控件对象 txtName =“冯伟” ’操作对象变量

借助将变量定义为对象类型并使用Set语句将对象指派到变置的方法,可以将任何数据库对象指定为变量的名称。当指定给对象一个变量名时,不是创建而是引用内存的对象。 关于VHA中的数据库对象操作,在后面的章节中还有介绍。 五、数组

数组是在有规则的结构中包含一种数据类型的一组数据,也称作数组元素变置。数组变量由变量名和数组下标构成,通常用Dim语句来定义数组,定义格式为: Dim数组名([下标下限to]下标上限)

缺省情况下,下标下限为0,数组元素从“数组名(0)”至“数组名(下标上限)”;如果使用to选项,则可以安排非0下限。 例如:

Dim NewArrary(10)As Integer ’定义了l1个整型数构成的数组,数组元素为 NewArray(0)至NewArray(10)

Dim NawArray(1 To 10)As loteger ’定义了10个整型数构成的数据,数组元素为 NewArray(1)至NewArray(10)

VBA也支持多维数组。可以在数组下标中加入多个数值,并以逗号分开,由此来建立多维数组,最做可以定义60维。下面定义了一个三维数组NewArray:

Dim NewArray(5,5,5)As Integer ’有6 * 6 * 6 = 216个元素

VBA还特意支持动态数组。定义和使用方法是:先用Dim显示定义数组但不指名数组元素数目,然后用ReDim关键字来决定数组包含的元素数,以建立动态数组。 下面举例说明动态数组的创建方法:

Dim NewArray( )As Long ’定义动态数组 …

ReDim NewArray(9,9,9) ’分配数组空间大小 …

实际开发过程中,当预先不知道数组定义需要多少元素时,动态数组是很有用的。而且不再需要动态数组包含的元素时,可以使用ReDim将其设为0个元素,就释放该数组占用的内存。

数组的作用域和生命周期的规则和关键字的使用方法与传统变量的范围及持续时间的规则和关键字的用法相同。

可以在模块的说明区域加人Global或Dim语句。然后在程序中使用ReDim语句,以说明动态数组为全局的和模块级的范围。如果以Static取代Dim来说明数组的话,数组可在程序的运行时保留上次运行时

的值。

VBA中,在模块的声明部分使用“Oplion Bale 1”语句。可以将数组的默认下标下限由0改为1。 六、变量标识命名法则

在编写VBA程序代码时,会用到大量的变量名称和不同的数据类型。对于控件对象,可以用 VBA的Set关键字将每个命名的控件对象指定为一个变量名称。但随着程序代码的增多,要记住所有变量的数据类型。就变成很困难的事情。

目前,VB和VBA均推荐使用Hungarian符号法来作为变量命名的法则。该方法也被广泛用在C和C++等程序设计中。

Hungarian符号法使用一组代表数据类型的码。用小写字母作为变量名的前缀。例如,代表文本框的字首码是txt,那么,文本框变量名为tetName.表8.4列出了最常用的变量标识符的前缀。编写程序时,使用上述变量标识命名法则,可使代码易于阅读与理解。

七、符号常量

在VBA编程过程中,对于一些使用频度较多的常量,可以用符号常量形式来表示。符号常量使用关键字Const来定义,格式如下: Const符号常量名称 = 常量值

例如,Const PI =3.14159 定义了一个符号常量PI。

若是在模块的声明区中定义符号常量,则建立一个所有模块都可使用的全局符号常量。一般是Const前面加上Global或Public关键词。 Global Const PI =3.14159

这一符号常量会涵盖全局或模块级的范围。

符号常量定义时不需要为常量指明数据类型,VBA会自动按存储效率最高的方式来确定其数据类型。符号常量一般要求大写命名,以便于变量区分。 八、系统常量

除了用户通过声明定义符号常量外,Access系统内部包含有若干个启动时就建立了系统常量,有True、False、Yes、No、On、Off和Null等。系统常量位于对象库中,单击“视图”菜单的“对象浏览器”命令,可

以在“对象浏览器”中查看到Access、VBA等对象库中提供的常量,在编写代码时可以直接使用。 例如,在“对象浏览器”窗口中,选择“工程/库”列表的Access项,再在“类”列表中选择“全局量”选项,Access的内部常量就会列出,如图8.10所示。

在列表“成员”中选择一个常量后,它的数值将出现在“对象浏览器”窗口的底部,如图8. 10所示的“Const acCmdSaveAs = 21”。一个好的编程习惯是尽可能地使用常量名字而不使用它们的数值。用户不能将这些内部常量的名字作为用户自定义常量或变量的名字。

8.3.5 常用标准函数

在VBA中,除模块创建中可以定义子过程与函数过程完成特定功能外,又提供了近百个内置的标准函数。可以方便地完成许多操作。

标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下: 函数名(<参数1><,参数2>[,参数3][,参数4][,参数5]... )

其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数。每个函数被调用时。都会返回一个返回值。需要指出的是:函数的参数和返回值都有特定的数据类型对应。常用函数请参见附录A。下面按分类介绍一些常用标准函数的使用。

一、算术函数

算术函数完成数学计算功能。主要包括以下算术函数: 1.绝对值函数:Abs(<表达式>)

返回数值表达式的绝对值。如Abs(-3) =3 2.向下取整函数:Int(<数值表达式>)

返回数值表达式的向下取整数的结果,参数为负值时返回小于等于参数值的第一负数。 3.取整函数:Fix(<数值表达式>)

返回数位表达式的整数部分,参数为负值时返回大于等于参数值的第一负数。

Int和Fix函数当参数为正值时,结果相同;当参数为负时结果可能不同。Int返回小于等于参数值的第一个负数,而Fix返回大于等于参数值的第一负数。

例如:Int(3.25)=3,Fix(3.25)=3但Int(-3.25)= -4,Fix(-3.25)= -3

4.四舍五入函数:Round(<数值表达式>[,<表达式>])

按照指定的小数位数进入四舍五入运算的结果。[<表达式>]是进入四舍五入运算小数点右边应保留的位数。

例如:Round(3.255,1)= 3.3;Round(3 .255,2);Round (3.754,1)= 3. 28;Round(3. 754,2)= 3.75;Round(3.754,0)= 4

5.开平方函数:Sqr(<数值表达式>)

计算数值表达式的平方根。例如:Sqr(9)= 3 6.产生随机数函数:Rnd(<数值表达式>) 产生一个0-1之间的随机数,为单精度类型。

数值表达式参数为随机数种子,决定产生随机数的方式。如果数值表达式值小于0,每次产生相同的随机数;如果数值表达式值大于0。每次产生新的随机数;如果数值表达式值等于0,产生最近生成的随机数,且生成的随机数序列相同;如果省略数值表达式参数,则歌认参数位大于0。

实际操作时,先要使用无参数的Randomize语句初始化随机数生成器。以产生不同的随机数序列。 例如:Int(100 * Rnd) ’产生[0,99]的随机整数 Int(101 * Rnd) ’产生[0,100]的随机整数 Int(100,Rnd+l) ’产生[i,l00]的随机整数 Int(100+200 * Rnd) ’产生[100, 299]的随机整数 Int(100 +201*Rnd) ’产生[100 , 300]的随机整数 二、字符串函数

1.字符串检索函数:InStr([Start,] [,Compare])

检索子字符申Str2在字符串Strl中最早出现的位置,返回一整型数。Start为可选参数,为数值式,设置检索的起始位置。如省略,从第一个字符开始检索;如包含Null值,发生错误。Compare也为可选参数,指定字符串比较的方法。值可以为1、2和0(缺省)。指定0(缺省)做二进制比较,指定1做不区分大小写的文本比较,指定2来做基于数据库中包含信息的比较。如值为Null,会发生错误。如指定了Compare参数,则一定要有Start参数。

注意,如果Strl的申长度为零,或Str2表示的申检索不到,则InStr返回0;如果Str2的串长度为零,InStr返回Start的值。 例如:strl =“98765” str2 =“65”

s = InStr(strl ,str2) ’返回4 s = InStr( 3,“aSsiAB”,“a”,1) ’返回5。从字符s开始,检索出字符A 2.字符申长度检测函数:Len(<字符申表达式>或<变量名>)

返回字符串所含字符数。注意,定长字符,其长度是定义时的长度,和字符串实际值无关。 例如:Dim str As String * 10 Dim i

str = “123” i = 12

lenl = Len(“12345”) ’返回5 len2 = Len(12) ’出错 len3 = Len(i) ’返回2 len4 = Len(“考试中心”) ’返回4 len4 = Len(str) ’返回10 3.字符串截取函数

Left (<字符串表达式>,):字符串左边起截取N个字符。 Right(<字符串表达式>,):字符串右边起截取N个字符。 Mid(<字符串表达式>,,[N2]):从字符申左边第N1个字符起截取N2个字符。


模块与VBA编程基础(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:16秋福建师范大学《学前儿童体育教育》在线作业一

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: