模块与VBA编程基础_第1页
模块与VBA编程基础_第2页
模块与VBA编程基础_第3页
模块与VBA编程基础_第4页
模块与VBA编程基础_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——模块与VBA编程基础

第8章模块与VBA编程基础

在Access系统中,借助前面章节介绍的宏对象可以完成事件的响应处理,例如开启和关闭窗体、报表等。但宏的使用也有一定的局限性。一是宏只能处理一些简单的操作,对于繁杂条件和循环等结构则无能为力,二是宏对数据库对象的处理,例如,表对象或查询对象的处理能力很弱。

“模块〞是将VBA声明和过程作为一个单元进行保存的集合体。通过模块的组织和VBA代码设计,可以大大提高Access数据库应用的处理处理能力,解决繁杂问题。

本章主要介绍Access数据库的模块类型及创立、VBA程序设计的基础。8.1模块的基本概念

模块是Access系统中的一个重要对象,它以VBA(VisualBasicforAapplication)以函数过程(Function)或子过程(Sub)为单元的集合方式存储。Access中,模块分为类模块和标准模块两种类型。8.1.1类模块

窗体模块和报表模块都属于类模块,它们附属于各自的窗体或报表。在窗体或报表的设计视图环境下可以用两种方法进入相应的模块代码设计区域;一是鼠标点击工具栏“代码〞按钮进入;二是为窗体或报表创立事件过程时,系统会自动进入相应代码设计区域。

窗体模块和报表模块寻常都含有事件过程,而过程的运行用于响应窗体或报表上的事件。使用事件过程可以控制窗体或报表的行为以及它们对用户操作的响应。

窗体模块和报表模块中的过程可以调用标准模块中已经定义好的过程。

窗体模块和报表迷狂具有局限性,其作用范围局限在所属窗体或报表内部,而生命周期则是伴随着窗体或报表的开启而开始、关闭而终止。8.1.2标准模块

标准模块一般用于存放供其他Access数据库对象使用的公共过程。在系统中可以通过创立新的模块对象而进入其代码设计环境。

标准模块寻常安排一些公共变量或过程供类模块里的过程调用。在各个标准模块内部也可以定义私有变量和私有过程仅供本模块内部使用。

标准模块中的公共变址和公共过程具有全局特性,其作用范围在整个应用程序里,生命周期是伴随着应用程序的运行而开始、关闭而终止。8.1.3将宏转换为模块

在Access系统中,根据需要可以将设计好的宏对象转换为模块代码形式。8.2在Access中创立模块8.2创立模块

过程是模块的单元组成,由VBA代码编写而成。过程分两种类型:Sub子过程和Function函数过程。一、在模块中参与过程

模块是装着VBA代码的容器。在窗体或报表的设计视图里,单击工具栏“代码〞按钮或者创立窗体或报表的事件过程可以进人类模块的设计和编辑窗口;单击数据库窗体中的“模块〞对象标签,然后单击“新建〞按钮即可进人标准模块的设计和编辑窗口。

一个模块包含一个声明区域,且可以包含一个或多个子过程(以Sub开头)或函数过程(以Function开头)。模块的声明区域是用来声明模块使用的变量等项目。1.Sub过程

又称为子过程。执行一系列操作,无返回值。定义格式如下:Sub过程名[程序代码]EndSub

可以引用过程名来调用该子过程。此外,VBA提供了一个关键字Call,可显示调用的一个子过程。在过程名前加上Call是一个很好的程序设计习惯。2.Function过程

又称为函数过程。执行一系列操作,有返回值。定义格式如下:

Function过程名As(返回值)类型[程序代码]EndFunction

函数过程不能使用Call来调用执行,需要直接引用函数过程名,并由接在函数过程名后的括号所分辩。二、在模块中执行宏

在模块的过程定义中,使用Docmd对象的RunMacro方法,可以执行设计好的宏。其调用格式为:Docmd.RunMacroMacroName[,RepeatCount][,RepeatExpression]

其中,MacroName表示当前数据库中宏的有效名称;RepeatCount可选项,用于计算宏运行次数的整数值;RepeatExpression可选项,数值表达式,在每一次运行宏时进行计算,结果为False时,中止运行宏。8.3VBA程序设计基础

VBA是徽软Office套件的内置编程语言,其语法与VisualBasic编程语言相互兼容。在Access程序设计中,当某些操作不能用其他Access对象实现,或者实现起来很困难时,就可以利用VBA语言编写代码,完成这些繁杂任务。

下面介绍VBA编程语言的一些概念和方法。

8.3.1面向对象程序设计的基本概念

Access内部提供了功能强大的向导机制,能处理基本的数据库操作。在此基础上再编写适当的程序代码,可以极大地改善程序功能。

Access内嵌的VBA,功能强大,采用目前主流的而向对象机制和可视化编程环境。1.对象和集合

Access采用面向对象程序开发环境,其数据库窗口可以便利地访问和处理表、查询、窗体、表、页、宏和模块对象。VBA中可以使用这些对象以及范围更广泛的一些可编程对象,例如“记录集〞等。

一个对象就是一个实体,如一辆自行车或一个人等。每种对象都具有一些属性以相互区分,如自行车的尺寸、颜色等。即属性可以定义对象的一个实例。例如一辆28#的自行车和一辆26#自行车就分别定义了自行车对象的两个不同的实例。

对象的属性按其类别会有所不同,而且同一对象的不同实例属性构成也可能有差异。譬如自行车对象的属性与人这个对象的属性显然不同、同属自行事对象的普通自行车和专业自行车的属性构成也不尽一致。

对象除了属性以外还有方法。对象的方法就是对象的可以执行的行为,自行车行走、人说话等。一般状况下,对象都具有多个方法。

Access应用程序由表、查询、窗体、报表、页、宏和模块对象列表构成,形成不同的类。Access数据库窗体左侧显示的就是数据库的对象类,单击其中的任一对象类,就可以开启相应对象窗口。而且,其中有些对象内部,例如窗体、报表等,还可以包含其他对象-Access中,控件外观和行为可以设置定义。集合表示的是某类对象所包含的实例构成。2.属性和方法

属性和方法描述了对象的性质和行为。其引用方式为:对象.属性或对象.行为。

Access中“对象〞可以是单一对象,也可以是对象的集合。例如,Labell.Caption属性表示“标签〞控件对象的标题属性,Reports.Item(0)表示报表集合中的第一个报表对象。数据库对象的属性均可以在各自的“设计〞视图中,通过“属性窗体〞进行浏览和设置。

Access应用程序的各个对象都有一些方法可供调用。了解并把握这些方法的使用可以极大地加强程序劝能,从而写出优秀的Access程序来。

Access中除数据库的7个对象外,还提供一个重要的对象:DoCmd对象。它的主要功能是通过调用包含在内部的方法实现VBA编程中对Access的操作。例如,利用DaCmd对象的OpenReport方法可开启报表“教师信息〞,语句格式为:DoCmd.OpenReport“教师信息〞

DoCmd对象的方法大都需要参数。有些是必给的。有些是可选的,被忽略的参数取缺省值。例如,上述OpenReport方法有4个参数.见下面调用格式:

DoCmd.OpenReportreportname[,view][,filtername][,wherecondition]其中只有reportname(报表名称)参数是必需的。

DoCmd对象还有大量方法,可以通过帮助文件查询使用。3.事件和事件过程

事件是Access窗休或报表及其上的控件等对象可以“辨识〞的动作,如单击鼠标、窗体或报表开启等。在Access数据库系统里,可以通过两种方式来处理窗体、报表或控件的事件响应。一是使用宏对象来设置事件属性,对此前面已有表达;二是为某个事件编写VBA代码过程,完成指定动作,这样的代码过程称为事件过程或事件响应代码。8.3.2VisualBasic编辑环境一、VisualBasic编辑器

VisualBasic编辑器(VBE,VisualBasicEditor)是编辑VBA代码时使用的界面。VBE编辑器提供了完整的开发和调试工具。图8.1所示的是Access数据库的VBA窗体。窗体主要由标准工具栏、工程窗口、属性窗口和代码窗口等组成。

1.标准工具栏

VBA窗口中的工具栏如图8.2所示。工具栏中主要按钮的功能见表8.1所示。

2.工程窗口(Project)

工程窗口又称工程资源管理器。在其中的列表框中列出了应用程序的所有模块。单击“查看代码〞按钮可以开启相应代码窗口,单击“查看对象〞按钮可以开启相应对象窗口,单击“切换文件夹〞按钮可以隐蔽或显示对象分类文件夹。

双击工程窗口上的一个模块或类,就会显示出相应代码的窗口。3.代码窗口(Code)

代码窗口是由对象组合框、事件组合框和代码编辑区3部分构成。

在代码窗口中可以输入和编辑VBA代码。实际操作时,可以开启多个代码窗口查看各个模块的代码,且代码窗口之间可以进行复制和粘贴。4.属性窗口(Propertis)

属性窗口列出了所选对象的各个属性,分“按字母序〞和“按分类序〞两种查看形式。可以直接在属性窗口中编辑对象的属性,这种方法称对象属性的一种“静态〞设置法;此外,还可以在代码窗口内使用VBA代码编辑对象的属性,这属于对象属性的“动态〞设置方法。

注意,为了在属性窗口中列出Access类对象,应首先开启这些类对象的“设计〞视图。5.马上窗口(Immediate)

马上窗口是用来进行快速的表达式计算、简单方法的操作及进行程序测试的工作窗口。在代码窗口编写代码时,要在马上窗口打印变量或表达式的值,可使用Debug.Print语句。二、进入VBE编程环境

在本章8.1节介绍了关于模块的概念,VBE的工程资源管理器将模块分为“对象〞、“标准〞和“类〞3种类型模块,全部的VBA代码全都包含在这3种类型模块中。对象模块包含了对窗体和报表发生的事件响应编写的代码;标准模块包含独立于指定对象的代码;类模块用于定义自定义对象的代码,在这里类模块暂不做探讨。

进人VBE编辑环境有多种方式:对于对象模块,在数据库对象窗体中,直接定位到窗体或报表上,然后单击菜单“视图〞下的“代码〞命令进人;或先定位到窗体或报表设计视图窗口上,通过指定对象事件处理过程进人,其方法有两种:

(1)右键单击控件对象,单击快捷菜单上的“小件生成器〞命令,开启如图8.3所示的对话框,选择其

中的“代码生成器〞,单击“确定〞按钮即可进人。

(2)单击属性窗口的“事件〞选项卡,选中某个事件直接单击属性栏右旁的“…〞按钮,也可以开启如图8.3所示“选择生成器〞对话框,选择其中的“代码生成器〞,单击“确定〞按钮即可进入。

对于标准模块,有3种进入方法:

(1)对于已存在的标准模块,只需从数据库窗体对象列表上选择“模块〞选项开启模块窗口,双击要查看的模块对象即可进人。

(2)要创立新的标准模块,需从数据库窗体对象列表上选择“模块〞选项开启模块窗口,单击工具栏上“新建〞按钮即可进人。

(3)在数据库对象窗体中,选择“工具〞菜单里“宏〞子菜单的“VisualBasic编辑器〞选项即可进人。使用Alt+F11组合键,可以便利地在数据库窗口和VBE之间进行切换。

三、VBE环境中编写VBA代码

VBA代码是由语句组成的,一条语句就是一行代码,例如:intCount=3’将3赋值给变量intCount

Debug.PrintintCount’在马上窗口打印变量intCount的值3

在VBA模块中不能存储单独的语句,必需将语句组织起来形成过程,即VBA程序是块结构,它的主体是事件过程或自定义过程。

在VBE的代码窗口,将上面的两条语句写入一个自定义的子过程Procel:SubProcel()

DimintCountAsIntegerintCount=3

Debug.PrintintCountEndSub

将光标定位在子过程Procel的代码中,按F5键运行子过程代码,在马上窗口会看到程序运行结果:3。对事件过程的代码编写,只要双击工程窗口中任何类或对象都可以在代码窗口中开启相应代码并进行编辑处理。操作时,在代码窗口的左边组合框选定一个对象后,右边过程组合框中会列出该对象所有事件过程,再从该对象事件过程列表选项中选择某个事件名称,系统会自动生成相应的事件过程模板,用户添加代码即可,如图8.4所示。

代码编辑区上部的通用声明段,主要书写模块级以上的变量声明、对选项的设置等,控制结构等语句要写在过程块结构中,过程块的先后次序与程序执行的先后次序无关。

在代码窗口内输人代码时,系统会自动显示关键字列表、关键字属性列表及过程参数列表等对象方法提醒信息,便利初学用户的使用。

例8.1新建窗体并在其上放置一个命令按钮,然后创立该命令按钮的“单击〞事件响应过程。操作步骤如下:(1)进人Access的窗体“设计〞视图,在新建窗体上添加一个命令按钮并命名为“cmdTest〞,如图8.5所示。

(2)选择“Test〞命令按钮,单击右键开启属性窗体,单击“事件〞卡片并设置“单击〞属性为“(事件过程)〞选项以便运行代码,如图8.6所示。

(3)单击属性栏右边的“…〞按钮,即进入新建窗体的类模块代码编辑区,如图8.7所示。在开启的代码编辑区里,可以看见系统已经为该命令按钮的“单击〞事件自动创立了事件过程的模板。

此时,只需在模板中添加VBA程序代码,这个事件过程即作为命令按钮的“单击〞事件响应代码。这里,仅给出了一条语句:

MsgBox"测试完毕!",vbinformation,"title"如图8.8所示。

4)按Alt+F11组合键回到窗体“设计〞视图,运行窗体,单击“test〞命令按钮即激活命令按钮“单击〞事件,

系统会调用设计好的事件过程来响应“单击〞事件的发生,弹出“测试完毕!〞消息框。响应代码运行效果如图8.9所示。

需要说明的是,上述事件过程的创立方法适合于所有Access窗体、报表和控件的事件代码处理。其间,Access会自动为每一个事件声明事件过程模板,并使用Private关键字指明该事件过程只能被同一模块中的其他过程所访问。四、程序语句书写原则1.语句书写规定

寻常将一个语句写在一行。语句较长,一行写不下时,可以用续写符(_)将语句连续写在下一行。可以使用冒号(:)将几个语句分隔写在一行中。

当输入一行语句并按下回车键后,假使该行代码以红色文本显示(有时伴有错误信息出现),则说明该行语句存在错误应更正。2.解释语句

一个好的程序一般都有解释语句。这对程序的维护有很大的好处。在VBA程序中,解释可以通过以下两种方式实现:使用Rem语句,格式为:Rem解释语句用单引号“’〞,格式为:’解释语句例8.2定义变量并赋值。Rem定义两个变量DimStrl,Str2

Strl=“Beijing〞:Rem解释在语句之后要用冒号隔开Str2=“Shanghai〞’这也是一条解释。这时,无需使用冒号。

解释可以添加到程序模块的任何位置,并且默认以绿色文本显示。还可以利用“编辑〞工具栏中的“设置解释块〞按钮和“解除解释块“按钮〞,对大块代码进行解释或解除解释。

3.采用缩写格式书写程序

采取正确的锁鞋进行格式以显示出流程中的结构。也可以利用“编辑〞菜单下的“缩进〞或“凸出〞命令进行设置。

4.F1帮助信息

可以将键盘光标停留在某个语句命令上按下F1键,系统会立刻提供相关的帮助信息。8.3.3数据类型和数据库对象

Access数据库系统创立表对象时所涉及的字段数据类型(除了OLE对象和备注数据类型外),在VBA中都有数据类型相对应。一、标准数据类型

传统的BASIC语言使用类型说明标点符号来定义数据类型,VBA则除此之外,还可以使用类型说明字符来定义数据类型,参见表8.2所示的VBA类型标识、符号、字段类型及取值范围。在使用VB代码中的字节、整数、长整数、自动编号、单粉度和双梢度数等的常量和变最与Access的其他对象进行数据交换时.必需符合数据表、查询、窗体和报表中相应的字段属性。

1.布尔型数据(Boolean)

布尔型数据只有两个值:True和False。布尔型数据转换为其他类型数据时,True转

换为-1,False转换为0;其他类型数据转换为布尔型数据时,0转换为False,其他值转换为Ture。2.日期型数据(Date)

任何可以识别的文本日期数据都可以赋给日前变量。“时间/日期〞类型数据必需前后用“#〞号封住,例如#2023/11/12#。3.变体类型数据(Variant))

变体类型是一种特别的数据类型,除了定长字符串类型及用户自定义类型外,可以包含其他任何类型的数据。变体类型还可以包含其他Empty、Error、Nothing和Null特别值。使用时,可以用VarType与TypeName两个函数来检查Variant中的数据。

VBA中规定,假使没有显式声明或使用符号来定义变量的数据类型,则默认为变体类型。

Variant数据类型十分灵活,但使用这种数据类型最大的缺点在于缺乏可读性,即无法通过查看代码来明确其数据类型。

二、用户定义的数据类型

应用过程中可以建立包含一个或多VBA标准数据类型的数据类型,这就是用户定义数据类型。它不仅包含VBA的标准数据类型,还可以包含前面已经说明的其他用户定义数据类型。用户定义数据类型可以在Type...EndType关键字间定义,定义格式如下:Type[数据类型名]AsAsEndType

例8.3定义一个学生信息数据类型。TypeNewStudent

txtNoAsString*7’学号,7位定长字符串txtNameAsString’姓名,变长字符串txtSexAsString*1’性别,1位定长字符申txtAgeAsInteger’年龄,整型EndType

上述例子定义T由txtNo(学号)、txtName(姓名)、txtSex(性别)和txtAge(年龄)4个分量组成的名为NewStudent的类型。

当需要建立一个变量来保存包含不同数据类型字段的数据表的一条或多条记录时,用户定义数据类型就特别有用。

一般用户定义数据类型使用时,首先要在模块区域中定义用户数据类型,然后显示以Dim,Public或Static关键字来定义此用户类型变量。

用户定义类型变量的取值.可以指明变量名及分量名,两者之间用句号分隔,例如,定义一个学生信息类型变量NewStud井操作分址的例子如下:DimNewStudasNewStudentNewStud.txtSno=“980306〞NewStud.txtName=“冯伟〞NewStud.txtSex=“女〞NewStud.txtAge=20

可以用关键字With简化程序中重复的部分。例如,为上面NewStud变量赋值可以用:WithNewStud

.txtSno=“980306〞.txtName=“冯伟〞.txtSex=“女〞.txtAge=20EndAge

8.3.4变量与常量

变量是指程序运行时值会发生变化的数据。变量名的命名,同字段命名一样,变量命名不能包含有空格或除了下划线字符(_)外的任何其他的标点符号,其长度不得超过255个字符。此外,变量命名不能使用VBA的关键字。VBA中的变量命名寻常采用大写与小写字母相结合的方式,以使其更具可读性。需要指出的是,在VBA里变量命名大小写不“敏感〞,即“NewVar〞和“newvar〞代表的是同一个变量。

常量是在程序中可以直接引用的实际值,其值在程序运行中不变。不同的数据类型,常量的表现形式也不同,在VBA中有3种常量:直接常量、符号常量和系统常量。

一、变量的声明

变量声明就是定义变量名称及类型,使系统为变量分派存储空间。VBA声明变量有两种方法。1.显式声明

变量先定义后使用是较好的程序设计习惯,如C、C++和Java语言等,都要求在使用变量前先定义该变量。

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

DimNewVar_1AsInteger’NewVa为整型变量

DimNewVar_2%,sun!’NewVar_2为整型变量,sun为单精度型变量DimNewVar_2%,sun!相当于DimNewVar_2AsInteger,sumAsSingle。2.隐含声明

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

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

二、强制声明

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

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

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

在VBA编程中,变量定义的位置和方式不同,则它存在的时间和起作用的范围也有所不同,这就是变量的作用域与生命周期。VisualBasic中变量的作用域有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关键字来建立控件对象的变量。当需要屡屡引用对象时,这样处理是很便利。例如,要屡屡操作引用窗体“学生管理〞上控件“姓名〞中的值时,可以使用以下处理方式:DimtxtNameAsControl’定义控件类型变量SettxtName=Forms!学生管理!姓名’指定引用窗体控件对象txtName=“冯伟〞’操作对象变量

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

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

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

DimNewArrary(10)AsInteger’定义了l1个整型数构成的数组,数组元素为NewArray(0)至NewArray(10)

DimNawArray(1To10)Asloteger’定义了10个整型数构成的数据,数组元素为NewArray(1)至NewArray(10)

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

DimNewArray(5,5,5)AsInteger’有6*6*6=216个元素

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

DimNewArray()AsLong’定义动态数组…

ReDimNewArray(9,9,9)’分派数组空间大小…

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

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

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

的值。

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

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

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

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

七、符号常量

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

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

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

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

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

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

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

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

8.3.5常用标准函数

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

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

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

一、算术函数

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

返回数值表达式的绝对值。如Abs(-3)=32.向下取整函数: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)=36.产生随机数函数: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)’返回4s=InStr(3,“aSsiAB〞,“a〞,1)’返回5。从字符s开始,检索出字符A2.字符申长度检测函数:Len(或)

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

str=“123〞i=12

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

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

注意,对于Left函数和Right函数,假使N值为0,返回零长度字符串;假使大于等于字符串的字符数,则返回整个字符串。对于Mid函数,假使N1值大于字符申的字符数,返回零长度字符串;假使省略N2,返回字符串中左边起N1个字符开始的所有字符。例如:strl=“opqrst〞

str2=“计算机等级考试〞

str=Left(strl,3)’返回“opq〞

str=Left(str2,4)’返回“计算机等〞str=Right(strl,2)’返回“st〞str=Right(str2,2)’返回“考试〞str=Mid(strl,4,2)’返回“rs〞

str=Mid(str2,1,3)’返回“计算机〞str=Mid(str2,4,)’返回“等级考试〞4.生成空格字符函数:Space()返回数值表达式的值指定的空格字符数。

例如:strl=Space(3)’返回3个空格字符5.大小写转换函数

Ucase():将字符串中小写字母转换成大写字母。Lcase():将字符串中大写字母转换成小写字毋。例如:strl=Ucase(“fHkrYt〞)’返回“FHKRYT〞str2=Lcase(“fHKrYt〞)’返回“fhkryt〞6.删除空格函数

Ltrim():删除字符串的开始空格。Rtrim():删除字符串的尾部空格。Trim():删除字符串的开始和尾部空格。例如:str=“abcde〞

str1=Ltrim(str)’返回“abcde〞str2=Rtrim(str)’返回“abcde〞str3=Trim(str)’返回“abcde〞三、日期/时间函数

日期/时间函数的功能是处理日期和时间。主要包括以下函数:1.获取系统日期和时间函数Date():返回当前系统日期。Time():返回当前系统时间。Now():返回当前系统日期和时间。

例如:D=Date()’返回系统气气,如2023-08-08T=Time()’返回系统时间,如9:45:00

DT=Now()’返回系统日期和时间,如2023-08-089:45:002.截取日期分量函数

Year():返回日期表达式年份的整数。Month():返回日期表达式月份的整数。Day():返回日期表达式日期的整数。

Weekday([.W]):返回1-7的整数,表示星期几。Weekday函数中,返回的星期值见表8.5所示。

例如:D=#2023-8-8#

YY=Year(D)’返回2023MM=Month(D)’返回8DD=Day(D)’返回8

WD=Weekday(D)’返回6,因2023-8-8为星期五3.截取时间分量函数

Hour():返回时间表达式的小时数(0-23)。Minute():返回时间表达式的分钟数(0-58)Second():返回时间表达式的秒数(0-59)。例如:T=#10:40:11#HH=Hours(T)’返回10MM=Minute(T)’返回40SS=Second(T)’返回114.日期/时间增加或减少一个时间间隔

DateAdd(,,):对表达式表示的日期依照间隔类型上或减去指定的时间间隔值。

注意,间隔类型参数表示时间间隔,为一个字符串,其设定值见表8.6所示;间隔值参数表示时间间隔的数目,数值可以为正数(得到未来的日期)或负数(得到过去的日期)。

例如:D=#2023-2-2910:40:11#

D1=DateAdd("YYYY",3,D)’返回#2023-2-28l0:40:11#,日期加3年D2=DateAdd("q",1,D)’返回#2023-5-2910:40:11#,日期加1季度D3=DateAdd("m",-2,D)’返回#2023-12-2910:40:11#,日期减2月D4=DateAdd("d",3,D)’返回#2023-3-310:40:11#,日期加3日D5=DateAdd("ww",2,D)’返回#20Q4-3-1410:40:11#,日期加2周D6=DateAdd("n",-150,D)’返回#2023-2-298:10:11#,日期减150分钟5.计算两个日期的间隔值函数

DateDiff(,,[,W1][,W2]):返回日期1和日期2之间依照间隔类型所指定的时间间隔数目。

注意,间隔类型参数表示时间间隔,为一个字符串,其设定值见表8.6所示。参数W1为可选项,是一个指定一星期的第一天是星期几的常数,如省略,默认为vbSunday,即周日返回1、周一返回2,以此类推,其参数设定值见表8.5所示。参数W2也为可选项,是一个指定一年的第一周的常数,如省略,默认值为vhFirstJan1,即包含1月1日的星期一为第一周,其参数设定值见表8.7所示。

例如:D1=#2023-5-2820:8:36#D2=#2023-2-2910:40:11#

n1=DateDiff("yyyy",D1,D2)’返回1,间隔1年n2=DateDiff("q",D1,D2)’返回3,间隔3季度n3=DateDiff("m",D2,D1)’返回-9,间隔9月

n4=DateDiff("ww",D1,D2)’返回40,间隔40周

n5=DateDiff("n",D1,D2),’返回398312,间隔398312分钟6.返回日期指定时间部分函数

DatePart(,,[,W1][,W2]):返回日期中依照间隔类型所指定的时间部分值。

注意,间隔类型参数表示时间间隔,为一个字符串。其设定值见表8.6所示。参数W1为可选项,是一个指定一星期的第一天是星期几的常数,如省略,默认为vbSunday,即周日返回1、周一返回2,以此类推,其参数设定值见表8.5所示。参数W2也为可选项,是一个指定一年的第一周的常数,如省略,默认值为,vbFirstJan1,即包含1月1日的星期为第一周,其参数设定值见表8.7所示。例如:D=#2023-2-2910:40:11#

n1=DatePart("yyyy",D)’返回2023n2=DatePart("d",D)’返回29n3=DatePart("ww",D)’返回107.返回包含指定年月日的日期函数

DateSerial(表达式1,表达式2,表达式3):返回由表达式1值为年、表达式2值为月、表达式3值为日而组成的日期值。

注意,每个参数的取值范围应当是可接受的;即日的取值范围应在1-31之间,而月的取值范围应在1-12之间。此外,当任何一个参数的取值超出可接受的范围时,它会适时进位到下一个较大的时间单位。例如,假使指定了35天,则这个天数被解释成一个月加上多出来的日数,多出来的日数将由其年份与月份来决定。

例如:D=DateSerial(2023,2,29),返回#2023-2-29#D=DateSerial(2023-l,8-2,0),返回##2023-5-31#

四、类型转换函数

类型转换函数的功能是将数据类型转换成指定数据类型。例如,窗体文本框中显示的数值数据为字符串型,要想作为数值处理就应进行数据类型转换。表8.8中已经列出了“C-〞开头的一些类型转换函数。下面再介绍另外一些类型转换函数。

1.字符串转换字符代码函数:Asc()

返回字符申首字符的ASCII值。例如:s=Asc("abcdef"),返回972.字符代码转换字符函数:Chr()返回与字符代码相关的字符。例如:s=Chr(70),返回f;s=Chr(13),返回回车符3.数字转换成字符串函数:Str()

将数值表达式值转换成字符串。注意,当一数字转成字符串时,总会在前头保存一空格来表示正负。表达式值为正,返回的字符串包含一前导空格表示有一正好。例如:s=Str(99)’返回“99〞,有一前导空格s=Str(-6)’返回“-6〞4.字符串转换成数字函数:Val()

将数字字符串转换成数值型数字。注意,数字串转换时可自动将字符串中的空格、制表符和换行符去掉,当遇到它不能识别为数字的第一个字符时,中止读入字符串。例如:s=Val("")’返回16s=Val("")’返回345s=Val("")’返回76

5.字符串转换日期函数:DateValue()

将字符串转换为日期值。例如:D=DateValue("February29,2023"),返回#2023-2-29#6.Nz函数:Nz(表达式或字段属性值[,规定值」)

当一个表达式或字段属性值为Null时,函数可返回0、零长度字符申("")或其他指定位。例如,可以使用该函数将Null值转换为其他值。

当省略“规定值〞参数时,假使“表达式或字段属性值〞为数值型且值为Null,Nz函数返回0;假使“表达式或字段属性值〞为字符型且值为Null,Nz函数返回空字符申("")。当“规定值〞参数存在时,该参数能够返回一个除0或零长度字符申以外的其他值。

8.3.6运算符和表达式

一、运算符

在VBA编程语言中,提供大量运算符来完成各种形式的运算和处理。根据运算不同,可以分成4种类型运算符:算术运算符、关系运算符、规律运算符和连接运算符。

1.算术运算符

用于算术运算,主要有乘暴(^)、乘法(*)、除法(/)、整数除法(\\)、求模运算(Mod)、加法(+)及减法(-)等7个运算符。

其中的加法(+)、减法(-)、乘法(*)和除法(/)4种运算符分别完成两个操作数的加法、减法、乘法和除法运算;整数除法(\\)运算符用来对两个数作除法并返回一个整数;求模运算(Mod)符用来对两个数作除法并且只返回余数;乘幂(^)运算符完成操作数的乘方运算。

注意,对于整数除法(\\)运算。假使操作数有小数都分,系统会舍去后再运算,假使结果有小数也要舍去。对于求模运算(Mod),假使操作数是小数,系统会四舍五入变成整数后再运算;假使被除数是负数,余数也是负数,反之,假使被除数是正数。

例如:

DimMyValue’变量定义MyValue=10Mod4’返回2MyValue=10Mod2’返回0MyValue=12Mod-5’返回2MyValue=-12.7Mod-5’返回-3MyValue=3^2’返回9MyValue=2^2^2’返回16MyValue=(-2)^3’返回-8MyValue=10.20\\4.9’返回2MyValue=9\\3’返回3MyValue=10\\3’返回32.关系运算符

用来表示两个或多个值或表达式之间的大小关系,有相等(=)、不等(<>)、小于(<)、大于(>)、小于相等(<=)和大于相等(>=)等6个运行符。

运用上述6个比较运算符可以对两个操作数进行大小比较。比较运算的结果为规律值:Ture或False,依据比较结果判定。例如:

DimMyValue’变量定义MyValue=(10>4)’返回TrueMyValue=(1>=2)’返回False

MyValue=(1=2)’返回False

MyValue=("ab"<>"aaa")’返回TrueMyValue=("周"<"刘")’返回False

MyValue=(#2023/12/25#<=#2023/2/28#)’返回True3.规律运算符

用于规律运算,包括:与(And)、或(Or)和非(Not)3个运算符。

运用上述3个规律运算符可以对两个规律量进行规律运算。其结果仍为规律值.运算法则参见表8.8所示。

例如:

DimMyValue’变量定义

MyValue=(10>4AND1>=2)’返回FalseMyValue=(10>4OR1>=2)’返回TrueMyValue=NOT(4=3)’返回True4.连接运算符

字符串连接运算符具有连接字符申的功能。有“&〞和“+〞两个运算符。“&〞用来强制两个表达式作字符串连接,例如连接式:"2+3"&"="&(2+3)的运算结果为字符串“2+3=5〞。

“+〞运算符是当两个表达式均为字符串数据时,才将两个字符串连接成一个新字符串。假使连接式写为:"2+3"&"="+(2+3),则系统会提醒出错信息“类型不匹配〞。二、表达式和优先级

将常量和变量用上述运算符连接在一起构成的式子就是表达式。例如,12*3/4-7Mod2+2>3就是一个表达式。

注意,在VBA中,规律量在表达式里进行算术运算,True值被当成-1、False值被当成0处理。当一个表达式由多个运算符连接在一起时,运算进行的先后顺序是由运算符的优先级决定的。优先级高的运算先进行,优先级一致的运算依照从左向右的顺序进行。VBA中常用运算符的优先级划分如表8.9所示。

关于运算符的优先级作如下说明:

(1)优先级:算术运算符>连接运算符>比较运算符>规律运算符。(2)所有比较运算符的优先级一致;也就是说,按从左到右顺序处理。(3)算术运算符和规律运算符必需按表8.11所列优先顺序处理。

(4)括号优先级最高。可以用括号改变优先顺序,强令表达式的某些部分优先运行。

8.4VBA流程控制语句

一个语句是能够完成某项操作的一条命令。VBA程序就是由大量的语句构成。VBA程序语句依照其功能不同分为两大类型:

一是声明语句。用于给变量、常量或过程定义命名;二是执行语句,用于执行赋值操作、调用过程、实现各种流程控制。

执行语句可分为3种结构:

(1)顺序结构:依照语句顺序顺次执行。如赋值语句、过程调用语句等。(2)分支结构:又称选择结构,根据条件选择执行路径。(3)循环结构;重复执行某一段程序语句。

8.4.1赋值语句

赋值语句是为变量指定一个值或表达式。寻常以等号(=)连接。在前面我们已屡屡用到,其使用格式为:

[Let]变量名=值或表达式这里,Let为可选项。例如:

DimtxtAgeAsIntegertxtAge=21

Debug.PrinttxtAge

首先定义了一个整形变量txtAge,然后对其赋值为21,最终将整形变量txtAge的值输出在马上窗口中,语句按顺序执行。

顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的语句序列,其程序执行的流程是按顺序完成操作的。8.4.2条件语句

在实际应用中,只是使用顺序结构是远远不能完成繁杂问题需求的。假使要想编写灵活的VBA程序,就要理解分支和循环的概念,分支结构使VBA能够根据条件判断做相关的决策,循环结构则可以提供屡屡运行一条或多条语句。

根据条件表达式的值来选择程序运行语句。主要有以下一些结构:1.If-Then语句(单分支结构)语句结构为:

IfThen或

IfThen

Endif

其功能是先计算条件表达式,当表达式哟值为True时,执行语句序列。单分支结构如图8.11所示。例8.4自定义过程Procedure1的功能是:假使当前系统时间超过12点,则在马上窗口显示“下午好!〞。在代码窗口输入以下自定义过程代码:SubProcedure1()

IfHour(Time())>=12ThenDebug.Print\下午好!\EndSub

将光标放在过程中,按F5运行程序,查看结果。

2.If-Then-Else语句(双分支结构)语句结构为:

IfThenElse或

IfThen

Else

EndIf

双分支流程结构图如图8.12所示。语句是否被执行,是根据语句前的条件表达式来确定的。表达式中

可能包含有额外的If-EndIf或其他流程控制结构。If-EndIf结构在另一个If-EndIf结构中出现的状况被称为条件结构嵌套。VBA中条件结构的嵌套数目和深度是有限制的。

例8.5修改过程Procedure1,新增功能是,假使当前系统时间为12点至18点,则在马上窗口显示“下午好!〞,否则显示“欢迎下次光临!〞。在代码窗口输入以下自定义过程代码:SubProcedure2()

IfHour(Time())>=12AndHour(Time())Then

ElseIfThen

……[Else

]EndIf

多分支结构流程图如图8.13所示。注意.Ease和If间并没有空格。

例8.6过程Procedure3功能:假使当前系统时间为8至12点钟之间,在马上窗口显示“上午好!〞,系统时间为12至18点之间,则显示“下午好!〞,其他时间均显示“欢迎下次光临!〞。在代码窗口输入以下自定义过程代码:

SubProeedure3()

IfHour(Time())>=8AndHour(Time())=12AndHour(Time())

EndSelect

SelectCase结构流程图如图8.14所示。

SelectCase结构运行时,首先计算“表达式〞的值,它可以是字符串或者数值变量或表达式。然后会依次计算测试每个Case表达式的值,直到值匹配成功,程序会转入相应Case结构内执行语句。Cese表达式可以是以下4种格式之一:

(1)单一数值或一行并列的数值,用来与“表达式〞的值相比较。成员间以逗号隔开。

(2)由关键字To分隔开的两个数值或表达式之间的范围。前一个值必需比后一个值要小,否则没有符合条件的状况。字符串的比较是从它们的第一个字符的ASCII码值开始比较的,直到分出大小为止。(3)关键字Is接关系运算符,如、=或>,后面再接变量或确切的值。(4)关键字CaseElse后的表达式,是在前面的Case条件都不满足时执行的。

Case语句是依次测试的,并执行第一个符合Case条件的相关的程序代码,即使再有其他符合条件的分支也不会再执行。

假使没有找到符合的,且有CaseElse语句的话,就会执行接在该语句后的程序代码。然后程序从接在EndSelect终止语句的下一行程序代码继续执行下去。例8.8使用SelectCase-EndSelect语句,完成例8.6的功能。SubProcedure3()

SelectCaseHour(Time())Case8To11

Debug.Print\上午好!\Case12To17

Debug.Print\下午好!\CaseElse

Debug.Print\欢迎下次光临!\EndSelectEndSub

例8.9采用SelectCase结构对字符进行分类。SelectCasea$

Case\'大写字母str$=\

Case\'小写字母Str$=\

Case\'数字Str$=\

Case\'分隔符Case\'空串Str$=\

CaseIsb,a,b)

(2)Switch函数:Switch(条件式,表达式1,[,条件式2,表达式2[,条件式n,表达式n]])该函数是根据“条件式1〞、“条件式2〞直至“条件式n〞的值来决定函数返回值。条件式是由左至右进行计算判断的,而表达式则会在第一个相关的条件式为True时作为函数返回值返回。假使其中有部分不成对,则会产生一个运行错误。

例如:根据变量x的值来为变量y赋值。y=Switch(x>0,1,x=0,0,x0时

若循环变量值终值,循环终止,退出循环。步长=0时

若循环变量值终值,一次也不执行循环。步长>0时

若循环变量值>=终值,循环继续,执行步骤c;若循环变量值循环体

[条件语句序列ExitDo

终止条件语句序列]Loop

这个循环结构是在条件式结果为真时,执行循环体,并持续到条件式结果为假或执行到选择性ExitDo语句而退出循环,循环流程如图8.19所示。

例8.15用DoWhile-Loop语句,完成例8.12大写英文26个字母向数组元素赋值的功能。代码如下:I=1

DoWhileI=2时

编写程序,在马上窗口中显示n为2到10时对应的序列值。代码如下:SubProcedure6()n=1f1=0f2=1

DoWhilen循环体[条件语句序列ExitDo

终止条件语句序列]Loop

例8.17将例8.15用DoUntil-Loop循环结构语句必定程序:I=1

DoUntilI>26'与WhileI26终止循环Str$(I)=Chr$(I+64)I=I+1Loop

上面两个Do循环的条件式均安排在结构的起始位置。实际上,条件式也可以安排在结构的末尾。4.Do-LoopWhile语句Do循环体[条件语句序列ExitDo

终止条件语句序列]LoopWhile条件式循环流程如图8.21所示。

5.Do-LoopUntil语句Do循环体[条件语句序列ExitDo

终止条件语句序列]LoopUntil条件式循环流程如图8.22所示。

这样,就有4种Do循环结构。使用时,分析方法基本一致。即根据条件式结果的真假,对循环与否做出正确判断。6.While-Wend语句

While-Wend循环与DoWhile-Loop结构类似,但不能在While-Wend循环中使用ExitDo语句。White-Wend语句格式为:While条件式循环体Wend

While-Wend结构主要是为了兼容QBasic和QuickBASIC而提供的。由于VBA中已有DoWhile-Loop循环结构,所以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论