收藏 分享(赏)

Access2010数据库 模块与VBA程序设计(详解).ppt

上传人:weiwoduzun 文档编号:3534348 上传时间:2018-11-12 格式:PPT 页数:292 大小:1.98MB
下载 相关 举报
Access2010数据库 模块与VBA程序设计(详解).ppt_第1页
第1页 / 共292页
Access2010数据库 模块与VBA程序设计(详解).ppt_第2页
第2页 / 共292页
Access2010数据库 模块与VBA程序设计(详解).ppt_第3页
第3页 / 共292页
Access2010数据库 模块与VBA程序设计(详解).ppt_第4页
第4页 / 共292页
Access2010数据库 模块与VBA程序设计(详解).ppt_第5页
第5页 / 共292页
点击查看更多>>
资源描述

1、模块与VBA程序设计,【本章主要掌握内容】 模块的基本概念及其创建 VBA中的数据类型 常量、变量与数组 VBA中的运算符、表达式和函数 VBA流程控制语句 VBA的数据库编程,VBA(Visual Basic for Application)是Visual Basic语言在Office编程中的应用。 VBA就是用来创建Access模块对象的编程语言。,第 一 节 模块的基本概念,模块是以VBA语言为基础编写的,将一个或多个过程(子过程或函数过程)作为一个单元进行保存的集合。模块中的每个过程实现各自的特定功能。 利用模块可以将各种数据库对象连接起来,构成一个完整的系统。 在Access中,模块

2、分为两种类型:类模块标准模块,一、类模块 类模块是依附于某一窗体或报表而存在的模块。 窗体和报表中含有对象,每个对象都有自己固有的事件过程,以响应窗体或报表中的事件。 为窗体或报表创建第一个事件过程时,系统会自动创建与之关联的窗体或报表模块。 在窗体或报表的设计视图下,可以单击工具栏中的【代码】按钮进入代码窗口。 已经具有事件过程的事件名称用黑色粗体表示。 窗体或报表中模块的作用范围仅局限于其所属的窗体或报表的内部,具有局部特征。,二、标准模块 标准模块是不与任何对象相关联的通用过程,这些过程可在数据库中的任何位置直接调用执行。 标准模块一般用于存放公共过程(子过程和函数过程),与其它任何Ac

3、cess对象不相关联。在Access系统中,通过模块对象创建代码的过程就是标准模块。 在标准模块中的全局变量或公共过程,其作用范围在整个应用程序里,具有全局特征。,三、打开模块的编辑窗口模块是在VBE(Visual Basic Editor)窗口中进行创建和编辑的。可以通过以下方法打开标准模块的VBE窗口: 在【创建】选项卡的【宏与代码】组中单击【模块】按钮(创建新模块) 在【导航】窗格中选择【模块】类别,使用组合键Alit + F11(数据库窗口与VBE窗口之间切换) 在【导航】窗格中右击某个模块对象,在快捷菜单中选择【设计视图】命令(打开该模块的代码窗口) 双击【导航】窗格中的某个模块对象

4、(打开该模块的代码窗口),在打开窗体或报表的设计视图后,可以通过以下方法打开类模块的VBE窗口: 单击【窗体设计工具】中的【设计】选项卡中的【查看代码】按钮 右击需要编辑代码的控件,并在快捷菜单中选择【事件生成器】命令,第 二 节 创 建 模 块,模块是以过程(或函数)为单元组成的,一个模块包含两个部分: 一个声明区域用于定义模块中使用的变 量等内容。 若干个子过程与函数过程过程是由代码组成的单 元,包含一系列计算语句和 执行语句,用于完成特定的 操作。过程名不能与所在模块 的模块名相同。,模块声明区域,子过程和函数定义区域,过程有两种类型:Sub过程(子过程)Function过程(函数过程)

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

6、变量之间用逗号隔开。 如果Sub过程没有参数,过程名后也必须包含一个空的圆括号。 在形参表中可以用As来设置参数的数据类型,未加As时,则参数为变体型数据。 在过程执行中一旦遇到Exit Sub语句,则结束过程的执行。 可以通过传递参数和使用参数来调用子过程,但子过程调用后不返回任何值。,【例】Public Sub xx ( m As String , n As Integer )End SubPublic Sub yy ( )End Sub,子过程的调用形式有两种: 语法格式一:Call 子过程名 ( 实参列表 ) 语法格式二:子过程名 实参列表 说明: 实参列表:在调用过程时用于传递给Su

7、b过程的变量列表,存在多个变量时,多个变量之间用逗号隔开。 实参列表和形参列表必须一一对应。,用Call调用子过程是一个良好的程序设计习惯,因关键词Call表明其后是过程名而不是变量名。,【例1】 Public Sub xx( m As String , n As Integer )Debug . Print m & n End SubPublic Sub yy( )Call xx( “ ABC “ , 5 ) End Sub运行子过程yy,即在立即窗口中显示:ABC5,2、Function过程在VBA除系统提供的标准函数外,还可以由用户自行定义函数过程(用户自定义函数)。函数过程和子过程在功

8、能上略有不同: 主程序调用过程后是执行了一个过程; 主程序而调用函数后是得到了一个结果。,函数过程是以Function开始,以End Function结束。 语法格式: Public | Private Static Function 函数名( 形参列表 ) AS 数据类型 程序代码 Exit Function 函数名 = 表达式程序代码 End Function,说明: AS 数据类型:定义函数返回值的数据类型。如果未定义,则系统将自动赋给函数过程一个最合适的数据类型。 函数名 = 表达式:函数体中对函数名进行赋值的语句,使函数得到一个返回值。 函数的定义中,必须至少含有一条给函数名的赋值语

9、句。如果没有此语句,将根据As语句定义的数据类型而返回0或空字符串或空值。 在函数过程执行中一旦遇到Exit Function语句,则结束函数过程的执行。,【例2】把0到9中数字转换成大写汉字Function vtoc ( x As Integer ) As StringDim cResult As StringDim n As StringcResult = “ “n = “零壹贰叁肆伍陆柒捌玖“cResult=mid(n,x+1,1)vtoc = cResultEnd Function,函数过程的调用形式: 语法格式:( 实参列表 ) 说明: 由于函数有返回值,因此调用时不能用Call命令

10、,而是直接引用函数名并加括号。 如果用Call命令调用函数,VBA将放弃函数的返回值。 函数过程的返回值可以直接赋给某个变量。【例】s = vtoc( 4 ),【例3】编写一个能够以年、月、日来返回系统日期的函数过程Getdate。Function Getdate( ) As StringGetdate = Year( Date ) & “年“ _& Month( Date ) & “月“ _& Day( Date ) & “日“End Function调用上述函数,并将结果在立即窗口中显示。Sub Pdate( )Debug.Print Getdate( )End Sub,第 三 节 VBA

11、程序设计基础,一、面向对象程序设计的基本概念所谓面向对象可以这样定义:面向对象 = 类 + 对象 + 属性的继承 + 对象之间的通信一个面向对象的应用系统中,每一个组成部分都是对象,所需实现的操作则通过建立对象与对象之间的通信来完成。,1、对象 客观世界里的任何实体都可以被看作是对象。对象可以是具体的物,也可以指某些概念。 在面向对象的程序设计中,对象代表应用程序中的元素,包括表、窗体、按钮等。 每个对象都具有自己的属性、事件和方法;用户就是通过属性、事件和方法来处理对象的。,2、对象的属性及属性值 属性是对象的特征,用来表示对象的状态。 不同类型的对象,其属性会有所不同;同类别对象的不同实例

12、,属性的值也会有差异。 既可以在创建对象时给对象设置属性值,也可以在执行程序时通过命令修改对象的属性值。,3、事件和事件过程 事件是对象可以识别的一个动作。 为使对象在某一事件发生时能够做出所需要的反应,必须针对这一事件编写相应的代码来完成相应的功能。 如果已经编写了某个对象的事件代码,那么当此事件发生时,这段事件代码将被自动激活并开始执行;如果事件没有发生,则此段代码永远不会被执行。 如果没有为对象编写事件代码,那么即使事件发生了,也不会产生任何动作。,4、方法 方法是对象能够执行的一个动作,即当对象接受了某个消息后所采取的一系列操作的描述。 相同类的对象具有相同的方法,不同类的对象所具有的

13、方法也有所不同。,每个对象都具有属性,以及与之相关的事件和方法,面向对象的程序设计就是通过对象的属性、事件和方法来处理对象。,可以在程序代码中引用对象的属性或调用对象方法。 语法格式: 父对象名 ! 对象名.属性名 父对象名 ! 对象名.方法名,5、类 类是面向对象程序设计中的核心。是对一类相同对象的集合,这些对象具有相同的性质、相同种类的属性以及方法。 类是对象的抽象,而对象是类的具体实例。有了类定义后,基于类就可以生成这类对象中任何一个对象。这些对象虽然采用相同的属性来表示状态,但它们在属性上的取值完全可以不同。这些对象一般有着不同的状态,且彼此间相对独立。,6、DoCmd对象DoCmd是

14、Access数据库的一个特殊对象,它是通过调用Access内置的方法,在程序中实现某些特定的操作。 语法格式:DoCmd.方法名 参数 说明:DoCmd对象的大多数方法都有参数,有些是必需的,有些则是可选的。若缺省,将采用默认的参数。,(1)用DoCmd对象打开窗体 语法格式:DoCmd.OpenForm “窗体名“ 功能:用默认形式打开指定窗体,(2)用DoCmd对象关闭窗体 语法格式一:DoCmd.Close acForm , “窗体名“ 功能:关闭指定窗体语法格式二:DoCmd.Close 功能:关闭当前窗体,(3)用DoCmd对象打开报表 语法格式:DoCmd.OpenReport “

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

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

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

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

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

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

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

22、中设置注释语句。注释语句可以添加到程序模块的任何位置,且不会被执行。 语法格式一:Rem (在其它语句之后出现时要用冒号分隔) 语法格式二: (可直接位于其它语句之后),注释语句默认以绿色文本显示。,(3)语法检查在代码窗口输入语句时,VBA会自动进行语法检查,即: 当输入一行语句并按Enter键后,如果该语句存在语法错误,则此行代码以红色文本显示,并显示一条错误信息。 必须找出语句中的错误并改正后才可以进行下一步的操作。,注意语法检查执行的时机。,三、数据类型 VBA在数据类型和定义方式上均继承了传统的Basic语言的特点。 Access数据库在创建表时所使用的字段数据类型在VBA中都有对应

23、的类型(OLE对象型、备注型和自动编号数据类型除外) 。 在声明变量的数据类型时,既可以使用数据类型名,也可以使用符号来定义。 (详见教材P262),1、字符型(String)货币型数据(Currency) 字符型常量必须要用一对英文半角的双引号括起来。 货币型数据的整数部分最多可达15位,小数位数最多只能使用4位。,2、布尔型数据(Boolean)布尔型数据也称逻辑型数据,其数据值只有两个:True和False。 当布尔型数据转换为其它类型数据时, True转换为-1,False转换为0。 当其它类型数据转换为布尔型数据时,0转换为False,非零值转换为True。,3、日期/时间型数据(D

24、ate) 日期/时间数据必须用一对“ # ”括起来 任何可以识别的文本日期数据都可以赋给日期变量。 【例】,“1949-10-01“,“10-01-1949“#,“01-10-1949“,“Oct , 01 , 1949“,#1949-10-01#,#10-01-1949#,#01-10-1949#,#1949-10-01#,输入后显示的日期格式系统默认为: mm / dd / yyyy,以数字序列表示日期时:小数点左边表示日期:1为1899年12月31日小数点右边表示时间:0为午夜0点0.5为中午12点负数表示1899年12月31日之前的日期 【例】 Sub aa( )Dim d As Da

25、ted = 1.1Debug . Print d End Sub,1899-12-31 02:24:00,4、变体型数据(Variant) 如果没有指定变量的具体数据类型,则系统默认该变量为变体型数据型。 变体型是一种特殊的数据类型,除了定长字符数据及用户自定义类型外,可以包含任何种类的数据,具体类型由最近所赋的值确定。 变体型数据可以包含Empty、Error、Nothing及Null等特殊值。 可以用VarType和TypeName函数来检测Variant中的数据类型。,5、对象型数据(Object) 对象型数据用来表示图形、OLE对象或其它对象。 对象型数据占4个字节的存储空间。 对象型

26、变量可引用应用程序中的对象。,6、用户自定义数据类型 用户自定义数据类型是由用户自行建立,由一个或多个VBA标准数据类型或其它用户自定义数据类型组合而成的一种数据类型。 用户自定义数据类型在关键字Type End Type之间定义。 语法格式:Type As As End Type,【例】自定义一个新的类型MyType,该类型中包含3个元素,分别命名为:MyName(字符型)、MyBirthday(日期型)、MySex(逻辑型)。 Type MyTypeMyName As StringMyBirthday As DateMySex As Boolean End Type定义类型以后就可以象普通

27、类型一样定义变量 Dim NewStu As MyType,用户自定义数据类型变量赋值时,使用以下语法格式: 语法格式:变量名 . 元素名 = 变量值【例】 Dim NewStu As MyType NewStu . MyName = “史建平“ NewStu . MyBirthday = #1988-10-01# NewStu . MySex = True,可以用关键字With End With简化赋值中的重复部分。 【例】 Dim NewStu As MyType With NewStu. MyName = “史建平“. MyBirthday = #1988-10-01#. MySex =

28、 True End With,Access与VBA数据类型的对比,四、常量、变量与数组 常量是在程序运行过程中,其值不能被改变的量。 变量是用于存储在程序运行时其值可以发生变化的量。每个变量都有其变量名,使用变量前可以指定其数据类型,也可以不指定其数据类型。 数组是由一组具有相同数据类型的变量(即数组元素)构成的集合。,1、常量Access中的常量有3种类型: 符号常量用Const语句创建,并且在模块中使用的常量。 内部常量是Access或引用库的一部分。 系统常量True、False、Null、Yes、No、On和Off等。,(1)符号常量如果在代码中要反复使用某个相同的值,或者代表一些具有

29、特定意义的数字或字符串,可以使用符号常量。符号常量用Const语句来创建,创建时给出常量的值。 语法格式: Public | Private Const符号常量名 As 数据类型 = 符号常量值 【例】Public Const PI As Single = 3.1415927Const NationalDay As Date = #1949-10-1#,在程序运行过程中,符号常量只能作读取操作,不允许修改或为其重新赋值。 不允许创建与内部常量和系统常量同名的符号常量。 如果用As选项定义了符号常量的数据类型,且所赋值的数据类型与定义的数据类型不相同,那么,系统自动将值的数据类型转换为所定义的数

30、据类型;如果不能转换将显示错误提示。 符号常量有3个作用范围级别:局部级别(过程级别)、私有级别和公共级别。 符号常量一般以大写字母命名,以便与变量区分(变量一般用小写字母命名)。,(2)内部常量 VBA提供了一些预定义的内部符号常量,它们主要作为DoCmd命令语句中的参数。 内部常量以ac两个前辍字母指明了定义该常量的对象库,如:acForm、acCmdsaveAs等。 通过对象浏览器可以查看所有可用对象库中的内部常量。,【对象浏览器】的调用可以利用VBE界面【视图】菜单命令或工具栏中按钮实现。,(3)系统常量 系统定义的常量有七个:True、False、Null、Yes、No、On和Off

31、。 系统常量可以在所有应用程序中直接使用。,2、变量变量名、变量的数据类型和变量的值是变量的三要素。变量由变量名标识。 (1)变量的命名规则 变量名只能由字母、数字、汉字和下划线组成,不能含有空格和除下划线之外的其它字符,长度不能超过255个字符 。 变量名必须以字母(包括汉字)开头,且不区分字母的大小写。 变量名不能使用VBA的关键字,不能与VBA的过程、函数和方法名同名。 同一作用域内变量名必须唯一。,注意区分变量的命名规则与字段名的命名规则(P63)。,(2)变量的声明方法变量的声明方式有两种:隐式声明和显式声明 。 隐式声明隐式声明是没有使用dim、Public、Private和Sta

32、tic等关键字来定义变量,而是直接使用变量。隐式声明的变量若其后无类型说明符来指明其数据类型时,默认为变体数据类型。隐式声明的变量只在当前过程中有效(即为局部变量)。 【例】x = “ABC“y = 123,显式声明Dim语句 语法格式:Dim 变量名1 As 数据类型 , _变量名2 As 数据类型 , 说明: 如果不使用As选项来定义变量的数据类型,系统默认该变量为Variant数据类型。Dim语句一行中可以声明多个变量,各变量声明之间用逗号分隔。,显式声明是指用Dim、Private、Public、Static语句来定义变量的数据类型。,【例】Dim a1 As Integer将a1定义

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

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

35、以访问公共变量。公共变量需要在模块的声明区域用Public声明。,公共变量和私有变量必须在模块(或窗体)的声明区域中声明。 语法格式:Public | Private 变量名 As 数据类型 功能:定义全局变量或私有变量。 说明: 全局变量必须在模块的声明区域用Public定义。 私有变量必须在模块的声明区域用Private或Dim定义。 在过程中用Dim定义的一定是局部变量。,Static是在过程级别中使用,用于声明变量并分配其存储空间。在整个代码运行期间都能保留使用 Static 语句声明的变量的值,且该变量与过程外的其它同名的变量无关 。,3种变量的定义方法及其作用域,3、数组 数组是用

36、相同名称保存的一组有序的数据集合,一般情况下该集合中数据元素的数据类型是相同的。 数组元素由数组名和数组下标构成,第一个数组元素的下标称为数组的下界,最后一个元素的下标称为数组的上界。,(1)数组的声明VBA中不允许隐式说明数组,即数组在使用前必须用Public、Private或Dim语句进行声明,说明数组的大小、数据类型及作用范围。 语法格式: Dim 数组名( 下标下界 to 下标上界 ) As 数据类型 Dim 数组名( 下标下界 to 下标上界 , ) As 数据类型 说明: 如果声明了数组的数据类型,则数组中的所有元素必须赋于相同的或可以转换的数据类型。 As选项缺省时,数组中各元素

37、为变体数据型。,下标下界的默认值为0,如果设置下标下界为非0值,则要使用to选项。 【例】 Dim aa( 5 ) As String Dim 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设置数组的下标下界为1Option Base 0(语句的默认形式)设置数组的下标下界为默认值,(2)数组的类型按照数组声明的方式,可以将数组分为两种类型:静态(

38、固定)数组和动态数组。 静态(固定)数组静态数组中的元素个数在声明时被指定静态数组在程序运行过程中不能改变数组元素的个数 【例】 Dim a1 ( 5 ) As Integer Dim a2 ( 1 to 5 ) Dim a3 ( 3 , 5 ) As Long,动态数组动态数组中的元素个数在声明时不指定动态数组在程序运行中可以改变数组的元素个数 动态数组定义步骤: 用Dim语句声明一个空维数组,即:不指定数组的大小Dim b1( ) 使用数组时用ReDim语句来指定数组的大小ReDim b1( 2 , 3 ),说明: ReDim语句只能出现在过程中,可以改变数组的大小、上下界和数组的维数。使

39、用ReDim重新声明数组后,原有数组元素中的值将全部清除并取其默认值。,注意教材P268的叙述!,若要保留数组中元素原有的值,则需在ReDim语句中加Preserve选项。 【例】Dim a1( ) As StringReDim 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 ),5,10,带Prese

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

41、符运算符是表示实现某种运算的符号。根据不同的运算,VBA中的运算符可分为4种类型:算术运算符字符串运算符关系运算符逻辑运算符。,P269,(1)算术运算符算术运算符用来执行简单的算术运算。VBA提供了8种算术运算符(详见教材P269)。,算术运算符两边的操作数都应该是数值型,如果是数字字符或逻辑型,则系统自动将其转换成数值型后再进行运算。,指数运算()求一个数的某次方。在运用乘方运算符时,只有当指数为整数值时,底数才可以为负数。 【例】 3 4 2 ( 1 / 2 )81 1.4142 ( - 2 ) 3 ( - 2 ) ( 1 / 2 )- 8 出错 True 3 Flase ( 1 / 2

42、 )- 1 0,整数除法()对两个操作数做除法运算并返回一个整数。整数除法的操作数一般为整型,当操作数是小数时,首先被四舍五入为整型或长整型,然后再进行整除运算。如果运算结果是小数,系统自动将其截断为整型或长整数,不再进行四舍五入处理。,【例】 11 / 33.666667 ( 浮点除法 ) 13.5 34 ( 整数除法,操作数先被四舍五入 ) 11 33 ( 整数除法,运算结果不做四舍五入 ) “ 7 “ “ 3 “2 ( 字符串先转换为数值型 ) 5 2 * 30 ( 乘法的运算级别高于整除 ) 3.56 7 / 3.52 ( 浮点除法的级别高于整除 ),取模运算(Mod)对两个操作数做除

43、法运算并返回余数。如果操作数有小数时,系统自动将其四舍五入为整数后再进行运算。结果的正负号与被除数相同。,【例】 11 Mod 32 12 Mod 30 - 11 Mod 3- 2 11 Mod - 32 11.4 Mod 32 11.56 Mod 6.20,算术运算符两边的操作数都应该是数值型,如果是数字字符、逻辑型,则系统自动将其转换成数值型后再进行运算;如果是日期型可以加(减)一个整数,表示后推(前推)若干天。 【例】 “123“ + 2 True + 20125 19 # 2012 - 01 - 01 # + 1 # 12 / 31 / 1899 # - 1# 2012 - 1 - 2

44、 # 0:00:00 # 2012 - 10 - 1 # - # 2012 - 10 - 2 #- 1 # 1900 - 1 - 1 # + # 1900 - 1 - 2 # 1900 - 1 - 4 #,(2)字符串运算符字符串运算符就是将两个字符串连接起来生成一个新的字符串。字符串运算符有两个:& 运算符、+ 运算符, & 运算符用于强制两个字符串的连接。 由于符号&还是长整型定义符,在字符串变量使用运算符&时,变量与运算符之间必须加一个空格。 【例】x& = 123x & #1949-10-1#,作为长整型定义符,作为连接运算符,运算符&两边的操作数可以是字符型、数值型或日期型。进行连接

45、操作前先将操作数的数据类型转换为字符型,然后再进行字符串的连接。 【例】123 & “ABC“aa = 123aa & “ ABC “aa&“ABC “,123ABC,定义变量并赋值,123ABC,出错, + 运算符用于连接两个字符串,形成一个新的字符串。 运算符两边的操作数必须都是字符串。 由于符号“ + ” 还是算术运算符,因此:如果两边的操作数都是数值型,则进行普通的加法运算。如果一个是数值型,另一个为数字字符串,则系统自动将数字字符串转化为数值,然后进行加法运算。如果一个是数值型,另一个为非数字字符串,则出错。,【例】 “ABC“ & 123 “ABC“ + “123“ABC123 A

46、BC123 “12.5“ & 24 “12.5“ + 2412.524 36.5 “A12.5“ & 24 “A12.5“ + 24A12.524 出错 “123.5“ & # 2001-09-11 #123.52001-9-11 12.5 & # 2011-10-01 #12.52011-10-1 # 2011-09-01 # + 10 # 9999-12-31 # + 12011-9-11 溢出,运算符“ & “ 与 “ + “的比较,日期所能表示的范围:100年1月1日至9999年12月31日 注:年份如果是两位数0 29之间,系统解释为2000 2029年30 99之间,系统解释为19

47、30 1999年,在VBA中,运算符“ + “既可用作加法运算符,也可以用作字符串运算符,但运算符“ & “专门作为字符串运算符。因此在有些情况下,用“ & “比用“ + “可能更为安全。,(3)关系运算符关系运算符用于对两个表达式比较大小,比较的结果将是一个逻辑值,即:若关系成立,则为真(True);反之则为假(False)。VBA提供了6种关系运算符(见教材P271)。,等于,=,“abc“=“abd“,False,大于,大于等于,小于等于,小于,不等于,=,=,“abc“abd“,45123,“45“ = “123“,#2012-1-1#=#2011-1-1#,“abcd“ “ABCD“

48、,False,True,True,False,False,在使用关系运算符时应注意以下原则: 如果参与比较的两个操作数都是数值型,则按它们的大小进行比较。 如果参与比较的两个操作数都是字符型,则从左到右一一对应比较。字母不区分大小写,且大于数字字符。汉字字符按汉语拼音比较大小,且大于西文字符。字符的大小顺序:汉字字符 字母 ( 按字母顺序且大小写相同 ) 数字 空格,注意教材P271的叙述。,在VBA中,允许部分不同数据类型的量进行比较,如:数值型与逻辑型数值型与日期型日期型与逻辑型日期型与数字字符数值型与数字字符注:均转换为数值型后再进行比较。,(4)逻辑运算符逻辑运算符用于对两个逻辑量进行逻辑运算,其结果仍然是一个逻辑值。VBA的逻辑运算主要为: AND (与运算) OR (或运算) NOT (非运算),各个逻辑运算符的真值表,True True,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报