第9章模块与VBA程序设计【Access2010数据库】_第1页
第9章模块与VBA程序设计【Access2010数据库】_第2页
第9章模块与VBA程序设计【Access2010数据库】_第3页
第9章模块与VBA程序设计【Access2010数据库】_第4页
第9章模块与VBA程序设计【Access2010数据库】_第5页
已阅读5页,还剩287页未读 继续免费阅读

下载本文档

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

文档简介

1、第 九 章模块与VBA程序设计【本章主要掌握内容本章主要掌握内容】模块模块的的基本概基本概念及其创建念及其创建VBA中的数据类型中的数据类型常常量、变量与数组量、变量与数组VBA中的中的运运算符、算符、表表达式和达式和函函数数VBA流流程程控控制制语语句句VBA的数据库编程的数据库编程VBA(Visual Basic for Application)是)是Visual Basic语言在语言在Office编程中的应用。编程中的应用。VBA就是用来创就是用来创建建Access模模块对象块对象的的编程语言。编程语言。第 一 节模块的基本概念模块模块是以是以VBA语语言为言为基础编写的,将基础编写的,

2、将一个一个或或多多个个过程(子过程或函数过程)作为一个单元进行过程(子过程或函数过程)作为一个单元进行保存的保存的集集合。模合。模块块中的每中的每个过个过程实程实现各自的特定现各自的特定功功能。能。利用模块可以将各种数据库对象连接起来,构利用模块可以将各种数据库对象连接起来,构成一个完整的系统。成一个完整的系统。在在Access中,模块分中,模块分为两种类型:为两种类型: 类模块类模块 标准模块标准模块一、类模一、类模块块类模块是依附于某一窗体或报表而存在的模块。类模块是依附于某一窗体或报表而存在的模块。窗体和报表中含有对象,每个对象都有自己固窗体和报表中含有对象,每个对象都有自己固有的事件过

3、程,以响应窗体或报表中的事件。有的事件过程,以响应窗体或报表中的事件。为窗体或报表创建第一个事件过程时,系统会为窗体或报表创建第一个事件过程时,系统会自动创建与之关联的窗体或报表模块。自动创建与之关联的窗体或报表模块。在窗体或报表的设计视图下,可以单击工具栏在窗体或报表的设计视图下,可以单击工具栏中的中的【代码代码】按钮进入代码窗口。按钮进入代码窗口。已经具有事件过程的事件名称用黑色粗体表示已经具有事件过程的事件名称用黑色粗体表示。窗窗体或体或报报表中模块的作用范围仅局限于其所属表中模块的作用范围仅局限于其所属的窗体或报表的内部,的窗体或报表的内部,具有局部特征具有局部特征。二、标准模二、标准

4、模块块标准模块是不与任何对象相关联的通用过程,标准模块是不与任何对象相关联的通用过程,这些过程这些过程可在可在数据库中的任何位置直接调用执行。数据库中的任何位置直接调用执行。标准模块一般用于存放公共过程(子过程和函标准模块一般用于存放公共过程(子过程和函数过程),与其它任何数过程),与其它任何Access对象不相关联。在对象不相关联。在Access系统中,通过模块对象创建代码的过程就系统中,通过模块对象创建代码的过程就是标准模块。是标准模块。在标准模块中的在标准模块中的全局变量全局变量或或公共过程公共过程,其作用,其作用范围在整个应用程序里,范围在整个应用程序里,具有全具有全局特征局特征。三三

5、、打开模块的编辑窗口、打开模块的编辑窗口 模块是在VBE(Visual Basic Editor)窗口中进行创建和编辑的。可以通过以下方法打开标准模块的VBE窗口:在【创建】选项卡的【宏与代码】组中单击【模块】按钮(创建新模块)在【导航】窗格中选择【模块】类别,使用组合键Alit + F11(数据库窗口与VBE窗口之间切换)在【导航】窗格中右击某个模块对象,在快捷菜单中选择【设计视图】命令(打开该模块的代码窗口)双击【导航】窗格中的某个模块对象(打开该模块的代码窗口) 在打开窗体或报表的设计视图后,可以通过以下方法打开类模块的VBE窗口:单击【窗体设计工具】中的【设计】选项卡中的【查看代码】按

6、钮右击需要编辑代码的控件,并在快捷菜单中选择【事件生成器】命令第 二 节创 建 模 块 模块是以过程(或函数)过程(或函数)为单元组成的,一个模块包含两个部分:一个声明区域 用于定义模块中使用的变量等内容。若干个子过程与函数过程 过程是由代码组成的单元,包含一系列计算语句和执行语句,用于完成特定的操作。 过程名不能与所在模块的模块名相同。模块声明区域子过程和函数定义区域过程有两种类型: Sub过程(子过程)过程(子过程) Function过程(函数过程)过程(函数过程)1、Sub过程过程 子过程以关键词Sub开始,以End Sub结束。语法格式:语法格式: Public | Private S

7、tatic Sub 子过程名子过程名 ( 形参列表形参列表 As 数据类型数据类型 ) 程序代码程序代码 Exit Sub 程序代码程序代码 End Sub说明:说明:Public 过程能被所有模块的所有其它过程调用。Private 过程只能被同一模块的其它过程调用。Static 用于设置静态变量(局部变量)。 如果没有使用Public或Private指定,过程则是Public(默认情况);如果没有使用Static,则在调用之后不会保留局部变量的值。形参列表形参列表:即调用时接受传递给:即调用时接受传递给Sub过程的参过程的参数的变量列表。如果有多个变量,则多个变量之数的变量列表。如果有多个变

8、量,则多个变量之间用逗号隔开间用逗号隔开。如如果果Sub过程没有参数,过程名后也必须包含过程没有参数,过程名后也必须包含一个空的圆括号。一个空的圆括号。在形参表中可以用在形参表中可以用As来设置参数的数据类型,来设置参数的数据类型,未加未加As时,则参数为变体型数据时,则参数为变体型数据。在过在过程执行中一旦遇到程执行中一旦遇到Exit Sub语语句,则结句,则结束束过过程的执程的执行行。可以通过传递参数和使用参数来调用子过程,可以通过传递参数和使用参数来调用子过程,但子过程调用后但子过程调用后不不返回任何值返回任何值。【例】 Public Sub xx ( m As String , n A

9、s Integer ) End Sub Public Sub yy ( ) End Sub 子过程的调用形式有两种:语法格式一:语法格式一: Call 子过程名 ( 实参列表 ) 语法格式二:语法格式二: 子过程名 实参列表 说明:说明:实参列表:在调用过程时用于传递给Sub过程的变量列表,存在多个变量时,多个变量之间用逗号隔开。实参列表和形参列表必须一一对应。 用Call调用子过程是一个良好的程序设计习惯,因关键词Call表明其后是过程名而不是变量名。【例1】Public Sub xx( m As String , n As Integer ) Debug . Print m & nEnd

10、SubPublic Sub yy( ) Call xx( ABC , 5 )End Sub运行子过程yy,即在立即窗口中显示:ABC52、Function过程过程 在VBA除系统提供的标准函数外,还可以由用户自行定义函数过程(用户自定义函数)。 函数过程和子过程在功能上略有不同:主程序调用过程后是执行了一个过程;主程序而调用函数后是得到了一个结果。 函数过程是以Function开始,以End Function结束。语法格式:语法格式: Public | Private Static Function 函数名 ( 形参列表 ) AS 数据类型 程序代码 Exit Function 函数名 = 表

11、达式 程序代码 End Function说明:说明:AS 数据类型:定义函数返回值的数据类型。如果未定义,则系统将自动赋给函数过程一个最合适的数据类型。函数名 = 表达式:函数体中对函数名进行赋值的语句,使函数得到一个返回值。函数的定义中,必须至少含有一条给函数名的赋值语句。如果没有此语句,将根据As语句定义的数据类型而返回0或空字符串或空值。在函数过程执行中一旦遇到Exit Function语句,则结束函数过程的执行。【例2】把0到9中数字转换成大写汉字 Function vtoc ( x As Integer ) As String Dim cResult As String Dim n

12、As String cResult = n = 零壹贰叁肆伍陆柒捌玖 cResult=mid(n,x+1,1) vtoc = cResult End Function 函数过程的调用形式:语法格式:语法格式: ( 实参列表 )说明:说明:由于函数有返回值,因此调用时不能用Call命令,而是直接引用函数名并加括号。如果用Call命令调用函数,VBA将放弃函数的返回值。函数过程的返回值可以直接赋给某个变量。【例】 s = vtoc( 4 )【例3】编写一个能够以年、月、日来返回系统日期的函数过程Getdate。 Function Getdate( ) As String Getdate = Yea

13、r( Date ) & 年 _ & Month( Date ) & 月 _ & Day( Date ) & 日 End Function 调用上述函数,并将结果在立即窗口中显示。 Sub Pdate( ) Debug.Print Getdate( ) End Sub第 三 节VBA程序设计基础一、面向对象程序设计的基本概念一、面向对象程序设计的基本概念 所谓面向对象可以这样定义: 面向对象 = 类 + 对象 + 属性的继承 + 对象之间的通信 一个面向对象的应用系统中,每一个组成部分都是对象,所需实现的操作则通过建立对象与对象之间的通信来完成。1、对、对象象 客观世界里的任何实体都可以被看作是

14、对象。对象可以是具体的物,也可以指某些概念。 在面向对象的程序设计中,对象代表应用程序中的元素,包括表、窗体、按钮等。 每个对象都具有自己的属性属性、事件事件和方法方法;用户就是通过属性、事件和方法来处理对象的。2、对象的属性及属性值、对象的属性及属性值 属性是对象的特征,用来表示对象的状态。 不同类型的对象,其属性会有所不同;同类别对象的不同实例,属性的值也会有差异。 既可以在创建对象时给对象设置属性值,也可以在执行程序时通过命令修改对象的属性值。3、事、事件和事件过程件和事件过程 事件是对象可以识别的一个动作。 为使对象在某一事件发生时能够做出所需要的反应,必须针对这一事件编写相应的代码来

15、完成相应的功能。 如果已经编写了某个对象的事件代码,那么当此事件发生时,这段事件代码将被自动激活并开始执行;如果事件没有发生,则此段代码永远不会被执行。 如果没有为对象编写事件代码,那么即使事件发生了,也不会产生任何动作。4、方法、方法 方法是对象能够执行的一个动作,即当对象接受了某个消息后所采取的一系列操作的描述。 相同类的对象具有相同的方法,不同类的对象所具有的方法也有所不同。 每个对象都具有属性,以及与之相关的事件和方法,面向对象的程序设计就是通过对象的属性、事件和方法来处理对象。对象对象属性属性事件事件方法方法 可以在程序代码中引用对象的属性或调用对象方法。语法格式:语法格式: 父对象

16、名 ! 对象名.属性名 父对象名 ! 对象名.方法名 父对象与子对象之间用“ ! ”连接; 对象与属性(方法)之间用“ . ”连接。5、类、类 类是面向对象程序设计中的核心。是对一类相同对象的集合,这些对象具有相同的性质、相同种类的属性以及方法。 类是对象的抽象,而对象是类的具体实例。 有了类定义后,基于类就可以生成这类对象中任何一个对象。这些对象虽然采用相同的属性来表示状态,但它们在属性上的取值完全可以不同。这些对象一般有着不同的状态,且彼此间相对独立。6、DoCmd对象对象 DoCmd是Access数据库的一个特殊对象,它是通过调用Access内置的方法,在程序中实现某些特定的操作。语法格

17、式:语法格式: DoCmd.方法名 参数 说明:说明: DoCmd对象的大多数方法都有参数,有些是必需的,有些则是可选的。若缺省,将采用默认的参数。(1)用DoCmd对象打开窗体语法格式:语法格式: DoCmd.OpenForm 窗体名 功能:功能:用默认形式打开指定窗体(2)用DoCmd对象关闭窗体语法格式一:语法格式一: DoCmd.Close acForm , 窗体名 功能:功能:关闭指定窗体语法格式二:语法格式二: DoCmd.Close功能:功能:关闭当前窗体(3)用DoCmd对象打开报表语法格式:语法格式: DoCmd.OpenReport 报表名 , acViewPreview功

18、能:功能:用预览形式打开指定报表(4)用DoCmd对象关闭报表语法格式一:语法格式一: DoCmd.Close acReport , 窗体名 功能:功能:关闭指定报表语法格式二:语法格式二: DoCmd.Close功能:功能:关闭当前报表(5)用DoCmd对象运行宏语法格式:语法格式: DoCmd.RunMacro 宏名功能:功能:运行指定宏(6)用DoCmd对象退出Access语法格式:语法格式: DoCmd.Quit功能:功能:关闭所有Access对象和Access本身(7)用DoCmd对象执行宏语法格式:语法格式: DoCmd.RunMacro 宏名 , 运行次数 , 数值表达式 功能:

19、功能:运行指定宏说明:说明:运行次数 用于计算宏运行的次数数值表达式 在每一次运行宏时进行计算,结果为False时,停止运行宏。二、二、VBA编程环境:编程环境:VBE VBE是编辑VBA代码时使用的界面。在VBE编辑器中可以编写VBA函数和过程。 使用Alt + F11可以实现数据库窗口和VBE之间的切换。1、VBE窗口的组成窗口的组成 VBE使用多种窗口来显示不同对象或是完成不同任务。VBE的窗口主要包括:标准工具栏工程窗口属性窗口代码窗口对象组合框事件组合框监视窗口立即窗口本地窗口(1)标准工具栏Access视图插入模块运行子过程/用户窗口中断运行终止运行/重新设计设计模式工程项目管理器

20、属性窗体对象浏览器(各按钮的功能参见教材P260)(2)工程窗口(工程资源管理器) 在Access中所谓工程就是指一个数据库应用系统。系统中所有的类对象和模块对象都在工程窗口中显示。 工程窗口以层次结构列表的形式显示当前数据库中的所有模块文件。鼠标双击其中之一,即打开其代码窗口。【查看代码】按钮 打开相应的代码窗口【查看对象】按钮 打开相应的对象窗口【切换文件夹】按钮 隐藏或显示对象分类文件夹(3)属性窗口 属性窗口列出了选定对象的属性,以便查看、修改这些属性。若选取了多个控件,属性窗口中列出的是所有控件的共同属性。对象框 用于选择对象属性列表 用于显示和修改对象的属性。属性列表可以按分类或按

21、字母进行排序。 直接在属性窗口中设置对象的属性,称“静态”设置;在代码窗口中,用VBA代码设置对象属性称“动态”设置。(4)代码窗口 代码窗口用于显示、编写及修改VBA代码。系统允许打开多个代码窗口,以查看不同窗体或模块中的代码。对象下拉列表框 显示对象名称。用于查看或选择其中的对象。过程/事件下拉列表框 显示与所选对象相关的事件。可以根据需要选择相应的事件。自动提示信息框 根据已经输入的内容作出相应的提示。(5)立即窗口 立即窗口是用来进行快速的表达式计算、简单方法的操作及进行程序测试的工作窗口。 在立即窗口中可以输入或者粘贴一行代码并执行该代码(按Enter键),执行结果将在立即窗口中显示

22、。语法格式:语法格式: ? 在代码窗口中编写代码时,如果要在立即窗口中显示变量或表达式的值,则使用Debug语句。语法格式:语法格式: Debug.Print 立即窗口中的代码及运行结果是不会被保存的。(6)监视窗口 在调试VBA程序时,可以利用监视窗口显示正在运行过程定义的监视表达式的值。(7)本地窗口 使用本地窗口可以自动显示正在运行过程中的所有变量声明及变量值。 以上窗口均可以用鼠标进行拖拉操作或关闭操作;也可以通过【视图】菜单使其显示。2、进入进入VBE编程环境编程环境 代码窗口是设计人员的主要操作界面。双击工程窗口中的任何对象,都可以在代码窗口中打开该对象的对应模块代码。 进入VBE

23、编程环境的方法有多种,对于类模块,其方法有:方法一方法一打开窗体或报表的设计视图,并选择对象单击【属性】对话框中的【事件】选项卡选择某个事件并设置属性为“事件过程”单击属性右侧的“”按钮 打开窗体或报表的设计视图后若无【属性】对话框,则可以由以下方法之一打开:单击【窗体设计工具】中的【设计】选项卡中的【属性表】按钮组合键:Alt + Enter方法二方法二打开窗体或报表的设计视图,并选择对象选择属性对话框中的【事件】选项卡直接单击某个事件右侧的“”按钮在打开的对话框中选择【代码生成器】方法三方法三打开窗体或报表的设计视图单击【窗体设计工具】中的【设计】选项卡中的【查看代码】按钮 对于标准模块,

24、其方法有:方法一方法一 在【创建】选项卡的【宏与代码】组中,单击【模块】按钮(创建一个新的模块)方方法二法二 双击数据库导航窗格中选择需要打开的模块对象(修改已经存在的标准模块)方方法三法三 在【数据库工具】选项卡的【宏】组中,单击【Visual Basic】按钮(仅进入VBE环境 。类似于使用组合键Alt + F11)3、VBA程序书写原则程序书写原则(1)语句书写规定 通常一个语句写一行 语句较长分行写时,可用续行符“ _ ”将语句连续写在下一行(续行符前需加一个空格续行符前需加一个空格) 可以用冒号“ : ”将多条短语句写在同一行中为显示程序的流程结构,可以采用缩进格式书写程序。代码设计

25、时,可按F1键显示帮助信息。(2)注释语句 为增加程序的可读性,可在程序中设置注释语句。注释语句可以添加到程序模块的任何位置,且不会被执行。语法格式一:语法格式一: Rem (在其它语句之后出现时 要用冒号分隔)语法格式二:语法格式二: (可直接位于其它语句之 后) 注释语句默认以绿色文本显示。(3)语法检查 在代码窗口输入语句时,VBA会自动进行语法检查,即: 当输入一行语句并按Enter键后,如果该语句存在语法错误,则此行代码以红色文本显示,并显示一条错误信息。 必须找出语句中的错误并改正后才可以进行下一步的操作。 注意语法检查执行的时机。三三、数据类型数据类型 VBA在数据类型和定义方式

26、上均继承了传统的Basic语言的特点。 Access数据库在创建表时所使用的字段数据类型在VBA中都有对应的类型(OLE对象型、备注型和自动编号数据类型除外) 。 在声明变量的数据类型时,既可以使用数据类型名,也可以使用符号来定义。(详见教材P262)1、字、字符型符型(String) 货货币型数据(币型数据(Currency)字符型常量必须要用一对英文半角的双引号括起来。货币型数据的整数部分最多可达15位,小数位数最多只能使用4位。2、布尔型数据(布尔型数据(Boolean) 布尔型数据也称逻辑型数据,其数据值只有两个:True和False。 当布尔型数据转换为其它类型数据时, True转换

27、为-1,False转换为0。 当其它类型数据转换为布尔型数据时,0转换为False,非零值转换为True。3、日期日期/时间型数据(时间型数据(Date) 日期/时间数据必须用一对“ # ”括起来 任何可以识别的文本日期数据都可以赋给日期变量。【例】1949-10-0110-01-1949#01-10-1949Oct , 01 , 1949#1949-10-01#10-01-1949#01-10-1949#1949-10-01#输入后显示的日期格式系统默认为:mm / dd / yyyy 以数字序列表示日期时: 小数点左边表示日期:1为1899年12月31日 小数点右边表示时间:0为午夜0点

28、0.5为中午12点 负数表示1899年12月31日之前的日期【例】Sub aa( ) Dim d As Date d = 1.1 Debug . Print dEnd Sub1899-12-31 02:24:004、变体型数据(、变体型数据(Variant) 如果没有指定变量的具体数据类型,则系统默认该变量为变体型数据型。 变体型是一种特殊的数据类型,除了定长字符数据及用户自定义类型外,可以包含任何种类的数据,具体类型由最近所赋的值确定。 变体型数据可以包含Empty、Error、Nothing及Null等特殊值。 可以用VarType和TypeName函数来检测Variant中的数据类型。5

29、、对象型数据(、对象型数据(Object) 对象型数据用来表示图形、OLE对象或其它对象。 对象型数据占4个字节的存储空间。 对象型变量可引用应用程序中的对象。6、用用户自户自定定义数据类型义数据类型 用户自定义数据类型是由用户自行建立,由一个或多个VBA标准数据类型或其它用户自定义数据类型组合而成的一种数据类型。 用户自定义数据类型在关键字Type End Type之间定义。语语法法格格式:式: Type As As End Type【例】自定义一个新的类型MyType,该类型中包含3个元素,分别命名为:MyName(字符型)、MyBirthday(日期型)、MySex(逻辑型)。Type

30、MyType MyName As String MyBirthday As Date MySex As BooleanEnd Type定义类型以后就可以象普通类型一样定义变量定义类型以后就可以象普通类型一样定义变量Dim NewStu As MyType 用户自定义数据类型变量赋值时,使用以下语法格式:语法语法格格式:式: 变量变量名名 . 元素元素名名 = 变量值变量值【例】Dim NewStu As MyTypeNewStu . MyName = 史建平NewStu . MyBirthday = #1988-10-01#NewStu . MySex = True 可以用关键字With En

31、d With简化赋值中的重复部分。【例】Dim NewStu As MyTypeWith NewStu. MyName = 史建平. MyBirthday = #1988-10-01#. MySex = TrueEnd WithAccess与与VBA数据类型的对比数据类型的对比含义含义Access数据类型数据类型VBA数据类型数据类型字节型字节型ByteByte短整型短整型Short、SmallIntInteger长整型长整型Integer、Int、LongLong单精度型单精度型Single、RealSingle双精度型双精度型Double、NumberDouble字符型字符型Char、Te

32、xt、StringString货币型货币型Currency、MoneyCurrency逻辑型逻辑型Logical、YesNoBoolean日期型日期型Date、TimeDate对象型对象型OLEObject、GeneralObject变体类型变体类型不支持不支持Variant四四、常量、变量与数组常量、变量与数组 常量 是在程序运行过程中,其值不能被改变的量。 变量 是用于存储在程序运行时其值可以发生变化的量。 每个变量都有其变量名,使用变量前可以指定其数据类型,也可以不指定其数据类型。 数组 是由一组具有相同数据类型的变量(即数组元素)构成的集合。1、常量、常量 Access中的常量有中的常

33、量有3种类型:种类型:符号常量符号常量 用用Const语句创语句创建,并建,并且在模块中使用的常量。且在模块中使用的常量。内部常量内部常量 是是Access或引用库的一部分。或引用库的一部分。系统常量系统常量 True、False、Null、Yes、No、On和和Off等。等。(1)符号常量)符号常量 如果在代码中要反复使用某个相同的值,或者如果在代码中要反复使用某个相同的值,或者代表一些具有特定意义的数字或字符串,可以使代表一些具有特定意义的数字或字符串,可以使用符号常量。用符号常量。 符号常量用符号常量用Const语句来创建,创建时给出常语句来创建,创建时给出常量的值。量的值。语法格式:语

34、法格式: Public | Private Const 符号常量符号常量名名 As 数据类型数据类型 = 符号常符号常量量值值【例】 Public Const PI As Single = 3.1415927 Const NationalDay As Date = #1949-10-1# 在程序运行过程中,符号常量只能作读取操作,在程序运行过程中,符号常量只能作读取操作,不允许修改或为其重新赋值。不允许修改或为其重新赋值。 不允许创建与内部常量和系统常量同名的符号不允许创建与内部常量和系统常量同名的符号常量。常量。 如果用如果用As选项定义了符号常量的数据类型,且选项定义了符号常量的数据类型,

35、且所赋值的数据类型与定义的数据类型不相同,那所赋值的数据类型与定义的数据类型不相同,那么,系统自动将值的数据类型转换为所定义的数么,系统自动将值的数据类型转换为所定义的数据类型;如果不能转换将显示错误提示据类型;如果不能转换将显示错误提示。 符号常符号常量有量有3个个作作用用范范围围级级别:别:局部级别局部级别(过过程级程级别)、别)、私有级别私有级别和和公公共共级级别别。 符号常量一般以大符号常量一般以大写字母命写字母命名,以便名,以便与变量与变量区区分(变分(变量一般用小写字母命量一般用小写字母命名名)。(2)内部常量)内部常量 VBA提供了一些预定义预定义的内部符号常量,它们主要作为Do

36、Cmd命令语句中的参数。 内部常量以ac两个前辍字母指明了定义该常量的对象库,如:acForm、acCmdsaveAs等。 通过对象浏览器可以查看所有可用对象库中的内部常量。 【对象浏览器】的调用可以利用VBE界面【视图】菜单命令或工具栏中按钮实现。(3)系统常量)系统常量 系统定义的常量有七个:True、False、Null、Yes、No、On和Off。 系统常量可以在所有应用程序中直接使用。2、变、变量量 变量名变量名、变量的数据类型数据类型和变量的值变量的值是变量的三要素。变量由变量名标识。(1)变量的命名规则 变量名只能由字母、数字、汉字和下划线组成,不能含有空格和除下划线之外的其它字

37、符,长度不能超过255个字符 。 变量名必须以字母(包括汉字)开头,且不区分字母的大小写。 变量名不能使用VBA的关键字,不能与VBA的过程、函数和方法名同名。 同一作用域内变量名必须唯一。 注意区分变量的命名规则与字段名的命名规则(P63)。(2)变量的声明方法)变量的声明方法 变量的声明方式有两种:隐式声明隐式声明和显式声显式声明明 。隐式声明隐式声明 隐式声明是没有使用dim、Public、Private和Static等关键字来定义变量,而是直接使用变量。 隐式声明的变量若其后无类型说明符来指明其数据类型时,默认为变体数据类型变体数据类型。 隐式声明的变量只在当前过程中有效当前过程中有效

38、(即为局部变量)。【例】 x = ABC y = 123 显式声明显式声明 Dim语句语法格式:语法格式:Dim 变量名1 As 数据类型 , _ 变量名2 As 数据类型 , 说明:说明:如果不使用As选项来定义变量的数据类型,系统默认该变量为Variant数据类型。 Dim语句一行中可以声明多个变量,各变量声明之间用逗号分隔。 显式声明是指用Dim、Private、Public、Static语句来定义变量的数据类型。【例】 Dim a1 As Integer将a1定义为整型 Dim a2 As Double将a2定义为双精度型 Dim a3 As String , a4 As Date将a

39、3定义为字符型,a4为日期型 Dim mm为变体型变量 Dim x , y , z As Singlex、y为变体型变量z为单精度型变量 类型说明符(隐式声明) 使用类型说明符定义变量的数据类型时,必须将其放在变量名的最后(各种类型说明符详见教材P262)。 类型说明符定义变量属于隐式声明。【例】 Var1% = 1234 Var2# = 123.45 Var3$ = abc“%:短整数:短整数 #:双精度数:双精度数&:长整数:长整数 $:字符串:字符串!:单精度:单精度 :货币:货币 VBA在判断一个变量的数据类型时,按以下顺序进行:Dim语句 数据类型说明符。 没有使用Dim语句或类型说

40、明符声明的变量,系统默认其为变体数据型。 为了避免使用隐式声明变量,可以在程序开始处使用Option Explicit语句来强制使用显式声明变量。在该方式下,如果变量没有经过显示声明或使用类型说明符,系统将提示错误。(3)变量的使用范围 因变量定义的位置与方式的不同,变量的作用域也有所不同。局部变量局部变量(过程级别变量) 局部变量只能在定义它的过程内使用,在其它的过程中无法存取局部变量。私有变量私有变量(私有模块级别变量) 私有变量只能在定义它的模块及其子过程内使用,而在其它模块中无法使用。公共变量公共变量(公共模块级别变量) 在任何模块和过程中都可以访问公共变量。公共变量需要在模块的声明区

41、域用Public声明。 公共变量和私有变量必须在模块(或窗体)的声明区域声明区域中声明。语法格式:语法格式: Public | Private 变量名 As 数据类型 功能:功能: 定义全局变量或私有变量。说明:说明:全局变量必须在模块的声明区域用Public定义。私有变量必须在模块的声明区域用Private或Dim定义。在过程中用Dim定义的一定是局部变量。局部变量局部变量私有变量私有变量全局变量全局变量声明方式声明方式DimStaticDimPrivatePublic声明位置声明位置在子过程中在子过程中在窗体在窗体/模块模块的声明区域的声明区域在标准模块在标准模块的声明区域的声明区域能否被

42、本模能否被本模块的其它过块的其它过程存取程存取不能不能能能能能能否被其它能否被其它模块的过程模块的过程存取存取不能不能不能不能能能 Static是在过程级别中使用,用于声明变量并分配其存储空间。在整个代码运行期间都能保留使用 Static 语句声明的变量的值,且该变量与过程外的其它同名的变量无关 。3种变量的定义方法及其作用域种变量的定义方法及其作用域3、数组、数组 数组是用相同名称保存的一组有序的数据集合,一般情况下该集合中数据元素的数据类型是相同的。 数组元素由数组名数组名和数组下标数组下标构成,第一个数组元素的下标称为数组的下界,最后一个元素的下标称为数组的上界。(1)数组的声明 VBA

43、中不允许隐式说明数组,即数组在使用前必须用Public、Private或Dim语句进行声明,说明数组的大小、数据类型及作用范围。语法格式:语法格式:Dim 数组名数组名( 下标下界下标下界 to 下标上界下标上界 ) As 数据类型数据类型 Dim 数组名数组名( 下标下标下界下界 to 下标下标上界上界 , ) As 数数据类型据类型 说明:说明: 如果声明了数组的数据类型,则数组中的所有元素必须赋于相同的或可以转换的数据类型。 As选项缺省时,数组中各元素为变体数据型。 下标下界的默认值为0,如果设置下标下界为非0值,则要使用to选项。【例】Dim aa( 5 ) As StringDim

44、 bb( 1 to 10 , 1 to 20 )Dim cc( 2 , 2 to 5 , 5 ) As Integer 该数组是一个3维数组: 第1维下标:0 2 第2维下标:2 5 第3维下标:0 5 可以在模块的通用声明部分用Option Base来指定数组的默认下标下界。 Option Base 1 设置数组的下标下界为1 Option Base 0(语句的默认形式) 设置数组的下标下界为默认值(2)数组的类型 按照数组声明的方式,可以将数组分为两种类型:静态(固定)数组和动态数组。静态(固定)数组 静态数组中的元素个数在声明时被指定 静态数组在程序运行过程中不能改变数组元素的个数【例】

45、Dim a1 ( 5 ) As IntegerDim a2 ( 1 to 5 )Dim a3 ( 3 , 5 ) As Long动态数组 动态数组中的元素个数在声明时不指定 动态数组在程序运行中可以改变数组的元素个数动态数组定义步骤:动态数组定义步骤:用Dim语句声明一个空维数组,即:不指定数组的大小 Dim b1( )使用数组时用ReDim语句来指定数组的大小 ReDim b1( 2 , 3 )说明:说明:ReDim语句只能出现在过程中,可以改变数组的大小、上下界和数组的维数数组的维数。使用ReDim重新声明数组后,原有数组元素中的值将全部清除并取其默认值默认值。 注意教材P268的叙述!若

46、要保留数组中元素原有的值,则需在ReDim语句中加Preserve选项。【例】 Dim a1( ) As String ReDim a1( 5 ) ReDim Preserve a1( UBound( a1) + 5 ) UBound(arrayname , dimension)函数的功能是:返回数组指定维的最大可用下标。【例】 Dim b1( 5 , 10 ) Debug.Print UBound( b1 , 1 ) Debug.Print UBound( b1 , 2 )510带Preserve选项的ReDim语句可以改变数组中最后一维的上界,但不能改变这一维的下界,改变下界将导致错误。若

47、改变后的数组比原来小,则多余数据将丢失。【例】【例】(3)数组的访问 数组声明后,数组中的每个元素都可以单独使用,使用的方法与相同数据类型的普通变量相同。语法格式:语法格式: 数组名( 下标值 )说明:说明:下标值是指定范围内(上下界之间)的一个整数,其值不能超出这个范围。如果是多维数组,则下标应是多个(不能多于数组维数),各整数间用逗号隔开。【例】 a1( 0 , 0 ) = ABC b1( 3 ) = 123Debug.Print b1( 3 ) + 100五五、运算符和表达式运算符和表达式1、运算符、运算符 运算符是表示实现某种运算的符号。根据不同的运算,VBA中的运算符可分为4种类型:

48、 算术运算符 字符串运算符 关系运算符 逻辑运算符。P269(1)算术运算符 算术运算符用来执行简单的算术运算。VBA提供了8种算术运算符(详见教材P269)。运算符运算符名名 称称优优 先先 级级说说 明明 乘幂运算1计算乘方和方根- -取负运算2* *乘法运算3/ /浮点除法3标准除法,结果为浮点数 整数除法4整数除法,结果为整数Mod取模运算5求余数+ +加法运算6- -减法运算6 算术运算符两边的操作数都应该是数值型,如果是数字字符或逻辑型,则系统自动将其转换成数值型后再进行运算。 指数运算() 求一个数的某次方。 在运用乘方运算符时,只有当指数为整数值时,底数才可以为负数。【例】3

49、4 2 ( 1 / 2 )81 1.4142( - 2 ) 3 ( - 2 ) ( 1 / 2 )- 8出错True 3Flase ( 1 / 2 )- 10 整数除法() 对两个操作数做除法运算并返回一个整数整数。 整数除法的操作数一般为整型,当操作数是小数时,首先被四舍五入为整型或长整型四舍五入为整型或长整型,然后再进行整除运算。 如果运算结果是小数,系统自动将其截断截断为整型或长整数为整型或长整数,不再进行四舍五入处理。【例】11 / 33.666667 ( 浮点除法 )13.5 34 ( 整数除法,操作数先被四舍五入 )11 33 ( 整数除法,运算结果不做四舍五入 ) 7 3 2 (

50、 字符串先转换为数值型 )5 2 * 30 ( 乘法的运算级别高于整除 )3.56 7 / 3.52 ( 浮点除法的级别高于整除 ) 取模运算(Mod) 对两个操作数做除法运算并返回余数余数。 如果操作数有小数时,系统自动将其四舍五四舍五入为整数后再进行运算入为整数后再进行运算。 结果的正负号与与被除数被除数相同相同。【例】11 Mod 3212 Mod 30- 11 Mod 3- 211 Mod - 3211.4 Mod 3211.56 Mod 6.20 算术运算符两边的操作数都应该是数值型,如果是数字字符、逻辑型,则系统自动将其转换成数值型后再进行运算;如果是日期型可以加(减)一个整数,表

51、示后推(前推)若干天。【例】123 + 2 True + 20125 19# 2012 - 01 - 01 # + 1 # 12 / 31 / 1899 # - 1# 2012 - 1 - 2 # 0:00:00# 2012 - 10 - 1 # - # 2012 - 10 - 2 #- 1# 1900 - 1 - 1 # + # 1900 - 1 - 2 # # 1900 - 1 - 4 # (2)字符串运算符 字符串运算符就是将两个字符串连接起来生成一个新的字符串。 字符串运算符有两个:& 运算符、+ 运算符 & 运算符 用于强制强制两个字符串的连接。由于符号&还是长整型定义符,在字符串变

52、量使用运算符&时,变量与运算符之间必须加一个变量与运算符之间必须加一个空格空格。【例】 x& = 123 x & #1949-10-1#作作为长整型定义为长整型定义符符作作为连接运算为连接运算符符运算符&两边的操作数可以是字符型、数值型或日期型。进行连接操作前先将操作数的数据类型转换为字符型,然后再进行字符串的连接。【例】 123 & ABC aa = 123 aa & ABC aa&ABC 123ABC定义变量并赋值123ABC出错 + 运算符 用于连接两个字符串,形成一个新的字符串。运算符两边的操作数必须都是字符串字符串。由于符号“ + ” 还是算术运算符,因此: 如果两边的操作数都是数值

53、型,则进行普通的加法运算。 如果一个是数值型,另一个为数字字符串,则系统自动将数字字符串转化为数值,然后进行加法运算。 如果一个是数值型,另一个为非数字字符串,则出错。【例】ABC & 123 ABC + 123ABC123 ABC12312.5 & 24 12.5 + 2412.524 36.5A12.5 & 24 A12.5 + 24A12.524出错123.5 & # 2001-09-11 #123.52001-9-1112.5 & # 2011-10-01 #12.52011-10-1# 2011-09-01 # + 10# 9999-12-31 # + 12011-9-11 溢出运算

54、运算符符 & 与与 + 的比较的比较日期所能表示的范围: 100年1月1日至9999年12月31日注:年份如果是两位数 0 29之间,系统解释为2000 2029年30 99之间,系统解释为1930 1999年 在VBA中,运算符 + 既可用作加法运算符,也可以用作字符串运算符,但运算符 & 专门作为字符串运算符。因此在有些情况下,用 & 比用 + 可能更为安全。(3)关系运算符 关系运算符用于对两个表达式比较大小,比较的结果将是一个逻辑值,即:若关系成立,则为真(True);反之则为假(False)。 VBA提供了6种关系运算符(见教材P271)。名名 称称运算符运算符举例举例说明说明 等于

55、等于=abc=abd False 大于大于 大于等于大于等于 小于等于小于等于 小于小于 不等于不等于=abcabd 45123 45 =#2011-1-1# abcd ABCD FalseTrueTrueFalseFalse在使用关系运算符时应注意以下原则: 如果参与比较的两个操作数都是数值型,则按它们的大小进行比较。 如果参与比较的两个操作数都是字符型,则从左到右一一对应比较。 字母不区分大小写,且大于数字字符。 汉字字符按汉语拼音比较大小,且大于西文字符。 字符的大小顺序: 汉汉字字符字字符 字母字母 ( 按字母顺序且大小写相同按字母顺序且大小写相同 ) 数字数字 空空格格 注意教材P2

56、71的叙述。 在VBA中,允许部分部分不同数据类型的量进行比较,如: 数值型与逻辑型 数值型与日期型 日期型与逻辑型 日期型与数字字符 数值型与数字字符注:注: 均转换为数值型后再进行比较。均转换为数值型后再进行比较。(4)逻辑运算符 逻辑运算符用于对两个逻辑量进行逻辑运算,其结果仍然是一个逻辑值。VBA的逻辑运算主要为: AND(与运算) OR(或运算) NOT(非运算)逻辑运算符逻辑运算符说说 明明Not当当Not连接的表达式为真时,整个表达式的连接的表达式为真时,整个表达式的值为假值为假And当当And连接的表达式均为真时,整个表达连接的表达式均为真时,整个表达式的值为真,否则为假式的值

57、为真,否则为假Or当当Or连接的表达式均为假时,整个表达式连接的表达式均为假时,整个表达式的值为假,否则为真的值为假,否则为真 各个逻辑运算符的真值表XYNot XX And YX Or YTrue TrueTrue FalseFalse TrueFalse FalseFalse True True False False TrueTrue False TrueTrue False FalseP2712、表达式、表达式(1)表达式的组成 表达式由字面值、常量、变量、运算符、函数、标识符、逻辑量和括号等按一定的规则组成。 表达式通过运算得出结果,运算结果的数据类型由操作数的数据类型和运算符共同决

58、定。 在算术运算表达式中,参与运算的操作数可能具有不同的数据精度,VBA规定:运算结果的数运算结果的数据类型采用精度高的数据类型据类型采用精度高的数据类型。(2)表达式的书写规则 要改变运算符的运算顺序,只能使用圆括号且必须成对出现; 乘号不能省略; 表达式从左至右书写,字母无大小写区分。注意:计算机表达式与数学不一样注意:计算机表达式与数学不一样(3)运算优先级 在一个运算表达式中,如果含有多种不同类型的运算符,则运算进行的先后顺序由运算符的优先级决定。优先级高 低高 低算术运算符算术运算符字符串运算符字符串运算符 关系运算符关系运算符逻辑运算符逻辑运算符指数运算 优先级相同优先级相同Not

59、取反 - - And乘法和除法 * /Or整数除法 模运算 Mod加法和减法 + - - 圆括号的优先级别最高,因此可以用圆括号改变表达式的运算顺序。P272【例】100 / 5 2412 / 5 * 24.812 5 * 21-12 Mod 5 * 2-23 + 4 * 2 12 + 34False【例】15 False And A & 12 B 15 False And A & 12 B 15 False And A12 = 90 , 优秀 , _IIf ( cj.cj 60 , 不及格 , 及格 ) )P282(2)Switch( )函数语法格式:语法格式: Switch ( Expr1

60、 , Value1 , Expr2 , Value2 , ) 功能:功能:依次判断各条件表达式的值,当某一表达式的值为True时,即输出其后的值。说明:说明:Expr1为条件表达式。Value1如果相关的条件表达式值为True时,即输出此部分的值。【例】根据输入的成绩判定等级。Switch ( cj.cj 60 , 不及格 , _cj.cj 90 , 及格 , _cj.cj = 100 , 优秀 )(3)Choose( )函数语法格式:语法格式: Choose ( Index , Choice1 , Choice2 , ) 功能:功能:根据Index的值从其后的列表中选择并返回一个值。说明:说

温馨提示

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

评论

0/150

提交评论