1、access2010,本幻灯片资料仅供参考,不能作为科学依据,如有不当之处,请参考专业资料。谢谢,模块与,VBA,程序设计,第1页,【,本章主要掌握内容,】,模块基本概念及其创建,VBA,中数据类型,常量、变量与数组,VBA,中运算符、表达式和函数,VBA,流程,控制语,句,VBA,数据库编程,第2页,VBA,(,Visual Basic for Application,)是,Visual Basic,语言在,Office,编程中应用。,VBA,就是用来创建,Access,模块对象编程语言。,第3页,第 一 节,模块基本概念,第4页,模块是以,VBA,语言为基础编写,将,一个,或,多个,过程
2、子过程或函数过程)作为一个单元进行保留集合。模块中每个过程实现各自特定功能。,利用模块能够将各种数据库对象连接起来,组成一个完整系统。,在,Access,中,模块分为两种类型:,类模块,标准模块,第5页,一、类模块,类模块是依附于某一窗体或报表而存在模块。,窗体和报表中含有对象,每个对象都有自己固有事件过程,以响应窗体或报表中事件。,为窗体或报表创建第一个事件过程时,系统会自动创建与之关联窗体或报表模块。,在窗体或报表设计视图下,能够单击工具栏中,【,代码,】,按钮进入代码窗口。,已经含有事件过程事件名称用黑色粗体表示。,窗体或报表中模块作用范围仅局限于其所属窗体或报表内部,,含有局部特征,
3、第6页,二、标准模块,标准模块是不与任何对象相关联通用过程,这些过程可在数据库中任何位置直接调用执行。,标准模块普通用于存放公共过程(子过程和函数过程),与其它任何,Access,对象不相关联。在,Access,系统中,经过模块对象创建代码过程就是标准模块。,在标准模块中,全局变量,或,公共过程,,其作用范围在整个应用程序里,,含有全局特征,。,第7页,三、打开模块编辑窗口,模块是在,VBE(Visual Basic Editor),窗口中进行创建和编辑。能够经过以下方法打开,标准模块,VBE,窗口:,在,【,创建,】,选项卡,【,宏与代码,】,组中单击,【,模块,】,按钮(创建新模块),
4、在,【,导航,】,窗格中选择,【,模块,】,类别,使用组合键,Alit+F11(,数据库窗口与,VBE,窗口之间切换),在,【,导航,】,窗格中右击某个模块对象,在快捷菜单中选择,【,设计视图,】,命令,(,打开该模块代码窗口),双击,【,导航,】,窗格中某个模块对象,(,打开该模块代码窗口),第8页,在打开窗体或报表设计视图后,能够经过以下方法打开,类模块,VBE,窗口:,单击,【,窗体设计工具,】,中,【,设计,】,选项卡中,【,查看代码,】,按钮,右击需要编辑代码控件,并在快捷菜单中选择,【,事件生成器,】,命令,第9页,第 二 节,创 建 模 块,第10页,模块是以,过程(或函数),为
5、单元组成,一个模块包含两个部分:,一个申明区域,用于定义模块中使用变,量等内容。,若干个子过程与函数过程,过程是由代码组成单,元,包含一系列计算语句和,执行语句,用于完成特定,操作。,过程名不能与所在模块,模块名相同。,模块申明区域,子过程和函数定义区域,第11页,过程有两种类型:,Sub,过程(子过程),Function,过程(函数过程),第12页,1,、,Sub,过程,子过程以关键词,Sub,开始,以,End Sub,结束。,语法格式:,Public|Private Static Sub,子过程名,(,形参列表,As,数据类型,),程序代码,Exit Sub,程序代码,End Sub,第1
6、3页,说明:,Public,过程能被全部模块全部其它过程调用。,Private,过程只能被同一模块其它过程调用。,Static,用于设置静态变量(局部变量)。,假如没有使用,Public,或,Private,指定,过程则是,Public,(默认情况);,假如没有使用,Static,,则在调用之后不会保留局部变量值。,第14页,形参列表,:即调用时接收传递给,Sub,过程参数变量列表。假如有多个变量,则多个变量之间用逗号隔开。,如果,Sub,过程没有参数,过程名后也必须包含一个空圆括号。,在形参表中能够用,As,来设置参数数据类型,未加,As,时,则参数为变体型数据。,在过程执行中一旦碰到,Ex
7、it Sub,语句,则结束过程执行。,能够经过传递参数和使用参数来调用子过程,但子过程调用后,不返回任何值,。,第15页,【,例,】,Public Sub xx(m As String,n As Integer),End Sub,Public Sub yy(),End Sub,第16页,子过程调用形式有两种:,语法格式一:,Call,子过程名,(,实参列表,),语法格式二:,子过程名,实参列表,说明:,实参列表,:在调用过程时用于传递给,Sub,过程变量列表,存在多个变量时,多个变量之间用逗号隔开。,实参列表和形参列表必须一一对应。,用,Call,调用子过程是一个良好程序设计习惯,因关键词,C
8、all,表明其后是过程名而不是变量名。,第17页,【,例,1】,Public Sub xx(m As String,n As Integer),Debug,.,Print m&n,End Sub,Public Sub yy(),Call xx(ABC ,5),End Sub,运行子过程,yy,,即在马上窗口中显示:,ABC5,第18页,2,、,Function,过程,在,VBA,除系统提供标准函数外,还能够由用户自行定义函数过程(用户自定义函数)。,函数过程和子过程在功效上略有不一样:,主程序,调用过程,后是,执行了一个过程,;,主程序而,调用函数,后是,得到了一个结果,。,第19页,函数过程
9、是以,Function,开始,以,End Function,结束。,语法格式:,Public|Private Static Function,函数名,(,形参列表,)AS,数据类型,程序代码,Exit Function,函数名,=,表示式,程序代码,End Function,第20页,说明:,AS,数据类型,:定义函数,返回值数据类型,。假如未定义,则系统将自动赋给函数过程一个最适当数据类型。,函数名,=,表示式,:函数体中对函数名进行赋值语句,使函数得到一个返回值。,函数定义中,必须最少含有一条给函数名赋值语句。假如没有此语句,将依据,As,语句定义数据类型而返回,0,或空字符串或空值。,在
10、函数过程执行中一旦碰到,Exit Function,语句,则结束函数过程执行。,第21页,【,例,2】,把,0,到,9,中数字转换成大写汉字,Function vtoc (x,As Integer,),As String,Dim cResult As String,Dim n As String,cResult=,n=,零壹贰叁肆伍陆柒捌玖,cResult=mid(n,x+1,1),vtoc=cResult,End Function,第22页,函数过程调用形式:,语法格式:,(,实参列表,),说明:,因为函数有返回值,所以调用时不能用,Call,命令,而是直接引用函数名并加括号。,假如用,Ca
11、ll,命令调用函数,,VBA,将放弃函数返回值。,函数过程返回值能够直接赋给某个变量。,【,例,】,s=vtoc(4),第23页,【,例,3】,编写一个能够以年、月、日来返回系统日期函数过程,Getdate,。,Function Getdate()As String,Getdate=,Year,(Date)&,年,_,&,Month,(Date)&,月,_,&,Day,(Date)&,日,End Function,调用上述函数,并将结果在马上窗口中显示。,Sub Pdate(),Debug.Print Getdate(),End Sub,第24页,第 三 节,VBA,程序设计基础,第25页,一
12、面向对象程序设计基本概念,所谓面向对象能够这么定义:,面向对象,=,类,+,对象,+,属性继承,+,对象之间通信,一个面向对象应用系统中,每一个组成部分都是对象,所需实现操作则经过建立对象与对象之间通信来完成。,第26页,1,、对象,客观世界里任何实体都能够被看作是对象。对象能够是详细物,也能够指一些概念。,在面向对象程序设计中,对象代表应用程序中元素,包含表、窗体、按钮等。,每个对象都含有自己,属性,、,事件,和,方法,;用户就是经过属性、事件和方法来处理对象。,第27页,2,、对象属性及属性值,属性是对象特征,用来表示对象状态。,不一样类型对象,其属性会有所不一样;同类别对象不一样实例,
13、属性值也会有差异。,既能够在创建对象时给对象设置属性值,也能够在执行程序时经过命令修改对象属性值。,第28页,3,、事件和事件过程,事件是对象能够识别一个动作。,为使对象在某一事件发生时能够做出所需要反应,必须针对这一事件编写对应代码来完成对应功效。,假如已经编写了某个对象事件代码,那么当此事件发生时,这段事件代码将被自动激活并开始执行;假如事件没有发生,则此段代码永远不会被执行。,假如没有为对象编写事件代码,那么即使事件发生了,也不会产生任何动作。,第29页,4,、方法,方法是对象能够执行一个动作,即当对象接收了某个消息后所采取一系列操作描述。,相同类对象含有相同方法,不一样类对象所含有方法
14、也有所不一样。,第30页,每个对象都含有属性,以及与之相关事件和方法,,面向对象程序设计就是经过对象属性、事件和方法来处理对象,。,对象,属性,事件,方法,第31页,能够在程序代码中引用对象属性或调用对象方法。,语法格式:,父对象名,!,对象名,.,属性名,父对象名,!,对象名,.,方法名,父对象与子对象之间用“,!,”,连接;,对象与属性(方法)之间用“,.,”,连接。,第32页,5,、类,类是面向对象程序设计中关键。是对一类,相同对象集合,,这些对象含有相同性质、相同种类属性以及方法。,类是对象抽象,而对象是类详细实例。,有了类定义后,基于类就能够生成这类对象中任何一个对象。这些对象即使采
15、取相同属性来表示状态,但它们在属性上取值完全能够不一样。这些对象普通有着不一样状态,且彼此间相对独立。,第33页,6,、,DoCmd,对象,DoCmd,是,Access,数据库一个特殊对象,它是经过调用,Access,内置方法,在程序中实现一些特定操作。,语法格式:,DoCmd.,方法名,参数,说明:,DoCmd,对象大多数方法都有参数,有些是必需,有些则是可选。若缺省,将采取默认参数。,第34页,(,1,)用,DoCmd,对象打开窗体,语法格式:,DoCmd.OpenForm ,窗体名,功效:,用默认形式打开指定窗体,第35页,(,2,)用,DoCmd,对象关闭窗体,语法格式一:,DoCmd
16、Close acForm,窗体名,功效:,关闭指定窗体,语法格式二:,DoCmd.Close,功效:,关闭当前窗体,第36页,(,3,)用,DoCmd,对象打开报表,语法格式:,DoCmd.OpenReport ,报表名,acViewPreview,功效:,用预览形式打开指定报表,第37页,(,4,)用,DoCmd,对象关闭报表,语法格式一:,DoCmd.Close acReport,窗体名,功效:,关闭指定报表,语法格式二:,DoCmd.Close,功效:,关闭当前报表,第38页,(,5,)用,DoCmd,对象运行宏,语法格式:,DoCmd.RunMacro ,宏名,功效:,运行指定宏,(
17、6,)用,DoCmd,对象退出,Access,语法格式:,DoCmd.Quit,功效:,关闭全部,Access,对象和,Access,本身,第39页,(,7,)用,DoCmd,对象执行宏,语法格式:,DoCmd.RunMacro ,宏名,运行次数,数值表示式,功效:,运行指定宏,说明:,运行次数,用于计算宏运行次数,数值表示式,在每一次运行宏时进行计算,结果为,False,时,停顿运行宏。,第40页,二、,VBA,编程环境:,VBE,VBE,是编辑,VBA,代码时使用界面。在,VBE,编辑器中能够编写,VBA,函数和过程。,使用,Alt+F11,能够实现数据库窗口和,VBE,之间切换。,第4
18、1页,1,、,VBE,窗口组成,VBE,使用各种窗口来显示不一样对象或是完成不一样任务。,VBE,窗口主要包含:,标准工具栏,工程窗口,属性窗口,代码窗口,对象组合框,事件组合框,监视窗口,马上窗口,当地窗口,第42页,(,1,)标准工具栏,Access,视图,插入模块,运行子过程,/,用户窗口,中止运行,终止运行,/,重新设计,设计模式,工程项目管理器,属性窗体,对象浏览器,(各按钮功效参见教材,P260,),第43页,(,2,)工程窗口(工程资源管理器),在,Access,中所谓工程就是指一个数据库应用系统。系统中全部类对象和模块对象都在工程窗口中显示。,工程窗口以层次结构列表形式显示当前
19、数据库中全部模块文件。鼠标双击其中之一,即打开其代码窗口。,【,查看代码,】,按钮,打开对应代码窗口,【,查看对象,】,按钮,打开对应对象窗口,【,切换文件夹,】,按钮,隐藏或显示对象分类文件夹,第44页,(,3,)属性窗口,属性窗口列出了选定对象属性,方便查看、修改这些属性。若选取了多个控件,属性窗口中列出是全部控件共同属性。,对象框,用于选择对象,属性列表,用于显示和修改对象属性。,属性列表能够按分类或按字母,进行排序。,直接在属性窗口中设置对象属性,称,“,静态,”,设置;在代码窗口中,用,VBA,代码设置对象属性称,“,动态,”,设置。,第45页,(,4,)代码窗口,代码窗口用于显示、
20、编写及修改,VBA,代码。系统允许打开多个代码窗口,以查看不一样学体或模块中代码。,对象下拉列表框,显示对象名称。用于查看或选择其中对象。,过程,/,事件下拉列表框,显示与所选对象相关,事件。能够依据需要选择,相应事件。,自动提醒信息框,依据已经输入内容作,出对应提醒。,第46页,(,5,)马上窗口,马上窗口是用来进行快速表示式计算、简单方法操作及进行程序测试工作窗口。,在马上窗口中能够输入或者粘贴一行代码并执行该代码(按,Enter,键),执行结果将在马上窗口中显示。,语法格式:,?,在代码窗口中编写代码时,假如要在马上窗口中显示变量或表示式值,则使用,Debug,语句。,语法格式:,Deb
21、ug.Print,马上窗口中代码及运行结果是不会被保留。,第47页,(,6,)监视窗口,在调试,VBA,程序时,能够利用监视窗口显示正在运行过程定义监视表示式值。,(,7,)当地窗口,使用当地窗口能够自动显示正在运行过程中全部变量申明及变量值。,以上窗口均能够用鼠标进行拖拉操作或关闭操作;也能够经过,【,视图,】,菜单使其显示。,第48页,2,、进入,VBE,编程环境,代码窗口是设计人员主要操作界面。双击工程窗口中任何对象,都能够在代码窗口中打开该对象对应模块代码。,进入,VBE,编程环境方法有各种,对于,类模块,,其方法有:,方法一,打开窗体或报表设计视图,并选择对象,单击,【,属性,】,对
22、话框中,【,事件,】,选项卡,选择某个事件并设置属性为“事件过程”,单击属性右侧“,”,按钮,打开窗体或报表设计视图后若无,【,属性,】,对话框,则能够由以下方法之一打开:,单击,【,窗体设计工具,】,中,【,设计,】,选项卡中,【,属性表,】,按钮,组合键:,Alt+Enter,第49页,方法二,打开窗体或报表设计视图,并选择对象,选择,属性对话框中,【,事件,】,选项卡,直接单击某个事件右侧“,”,按钮,在打开对话框中选择,【,代码生成器,】,方法三,打开窗体或报表设计视图,单击,【,窗体设计工具,】,中,【,设计,】,选项卡中,【,查看代码,】,按钮,第50页,对于,标准模块,,其方法有
23、方法一,在,【,创建,】,选项卡,【,宏与代码,】,组中,单击,【,模块,】,按钮(创建一个新模块),方法二,双击数据库导航窗格中选择需要打开模块对象(修改已经存在标准模块),方法三,在,【,数据库工具,】,选项卡,【,宏,】,组中,单击,【Visual Basic】,按钮(仅进入,VBE,环境。类似于使用组合键,Alt+F11,),第51页,3,、,VBA,程序书写标准,(,1,)语句书写要求,通常一个语句写一行,语句较长分行写时,可用续行符“,_,”,将语句连续写在下一行(,续行符前需加一个空格,),可以用冒号“,:,”,将多条短语句写在同一行中,为显示程序流程结构,能够采取缩进格式书
24、写程序。,代码设计时,可按,F1,键显示帮助信息。,第52页,(,2,)注释语句,为增加程序可读性,可在程序中设置注释语句。注释语句能够添加到程序模块任何位置,且不会被执行。,语法格式一:,Rem,(在其它语句之后出现时,要用冒号分隔),语法格式二:,(可直接位于其它语句之,后),注释语句默认以绿色文本显示。,第53页,(,3,)语法检验,在代码窗口输入语句时,,VBA,会自动进行语法检验,即:,当输入一行语句并按,Enter,键后,,假如该语句存在语法错误,则此行代码以红色文本显示,并显示一条错误信息。,必须找出语句中错误并更正后才能够进行下一步操作。,注意语法检验执行时机。,第54页,三、
25、数据类型,VBA,在数据类型和定义方式上均继承了传统,Basic,语言特点。,Access,数据库在创建表时所使用字段数据类型在,VBA,中都有对应类型(,OLE,对象型、备注型和自动编号数据类型除外,)。,在申明变量数据类型时,既能够使用数据类型名,也能够使用符号来定义。,(详见教材,P262,),第55页,1,、字符型(,String,),货币型数据(,Currency,),字符型常量必须要用一对英文半角双引号括起来。,货币型数据整数部分最多可达,15,位,小数位数最多只能使用,4,位。,第56页,2,、布尔型数据(,Boolean,),布尔型数据也称逻辑型数据,其数据值只有两个:,Tru
26、e,和,False,。,当布尔型数据转换为其它类型数据时,,True,转换为,-1,,,False,转换为,0,。,当其它类型数据转换为布尔型数据时,,0,转换为,False,,非零值转换为,True,。,第57页,3,、日期,/,时间型数据(,Date,),日期,/,时间数据必须用一对“,#,”,括起来,任何能够识别文本日期数据都能够赋给日期变量。,【,例,】,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/
27、dd/yyyy,第58页,以数字序列表示日期时:,小数点左边表示日期:,1,为,1899,年,12,月,31,日,小数点右边表示时间:,0,为午夜,0,点,0.5,为中午,12,点,负数表示,1899,年,12,月,31,日之前日期,【,例,】,Sub aa(),Dim d As Date,d=1.1,Debug,.,Print d,End Sub,1899-12-31 02:24:00,第59页,4,、变体型数据(,Variant,),如果没有指定变量详细数据类型,则系统默认该变量为变体型数据型。,变体型是一个特殊数据类型,除了定长字符数据及用户自定义类型外,能够包含任何种类数据,详细类型由
28、最近所赋值确定。,变体型数据可以包含,Empty,、,Error,、,Nothing,及,Null,等特殊值。,能够用,VarType,和,TypeName,函数来检测,Variant,中数据类型。,第60页,5,、对象型数据(,Object,),对象型数据用来表示图形、,OLE,对象或其它对象。,对象型数据占,4,个字节存放空间。,对象型变量可引用应用程序中对象。,第61页,6,、用户自定义数据类型,用户自定义数据类型是由用户自行建立,由一个或多个,VBA,标准数据类型或其它用户自定义数据类型组合而成一个数据类型,。,用户自定义数据类型在关键字,Type End Type,之间定义,。,语法
29、格式:,T,ype ,As ,As ,End Type,第62页,【,例,】,自定义一个新类型,MyType,,该类型中包含,3,个元素,分别命名为:,MyName(,字符型)、,MyBirthday(,日期型)、,MySex(,逻辑型)。,Type MyType,MyName As String,MyBirthday As Date,MySex As Boolean,End Type,定义类型以后就能够象普通类型一样定义变量,Dim NewStu As MyType,第63页,用户自定义数据类型变量赋值时,使用以下语法格式:,语法格式:,变量名,.,元素名,=,变量值,【,例,】,Dim N
30、ewStu As MyType,NewStu,.,MyName=,史建平,NewStu,.,MyBirthday=#1988-10-01#,NewStu,.,MySex=True,第64页,能够用关键字,With End With,简化赋值中重复部分。,【,例,】,Dim NewStu As MyType,With NewStu,.,MyName=,史建平,.,MyBirthday=#1988-10-01#,.,MySex=True,End With,第65页,Access,与,VBA,数据类型对比,含义,Access,数据类型,VBA,数据类型,字节型,Byte,Byte,短整型,Short
31、SmallInt,Integer,长整型,Integer、Int、Long,Long,单精度型,Single、Real,Single,双精度型,Double、Number,Double,字符型,Char、Text、String,String,货币型,Currency、Money,Currency,逻辑型,Logical、YesNo,Boolean,日期型,Date、Time,Date,对象型,OLEObject、General,Object,变体类型,不支持,Variant,第66页,四、常量、变量与数组,常量,是在程序运行过程中,其值不能被改变量。,变量,是用于存放在程序运行时其值能够
32、发生变化量。,每个变量都有其变量名,使用变量前能够指定其数据类型,也能够不指定其数据类型。,数组,是由一组含有相同数据类型变量(即数组元素)组成集合。,第67页,1,、常量,Access,中常量有,3,种类型:,符号常量,用,Const,语句创建,并且在模块中使用常量。,内部常量,是,Access,或引用库一部分。,系统常量,True,、,False,、,Null,、,Yes,、,No,、,On,和,Off,等。,第68页,(,1,)符号常量,假如在代码中要重复使用某个相同值,或者代表一些含有特定意义数字或字符串,能够使用符号常量。,符号常量用,Const,语句来创建,创建时给出常量值。,语法
33、格式:,Public|Private,Const,符号常量,名,As,数据类型,=,符号常量值,【,例,】,Public Const PI As Single=3.1415927,Const NationalDay As Date=#1949-10-1#,第69页,在程序运行过程中,符号常量只能作读取操作,不允许修改或为其重新赋值。,不允许创建与内部常量和系统常量同名符号常量。,假如用,As,选项定义了符号常量数据类型,且所赋值数据类型与定义数据类型不相同,那么,系统自动将值数据类型转换为所定义数据类型;假如不能转换将显示错误提醒。,符号常量有,3,个作用范围级别:,局部级别,(过程级别)、,
34、私有级别,和,公共级别,。,符号常量普通以大写字母命名,方便与变量区分(变量普通用小写字母命名)。,第70页,(,2,)内部常量,VBA,提供了一些,预定义,内部符号常量,它们主要作为,DoCmd,命令语句中参数。,内部常量以,ac,两个前辍字母指明了定义该常量对象库,如:,acForm,、,acCmdsaveAs,等。,经过对象浏览器可以查看全部可用对象库中内部常量。,【,对象浏览器,】,调用能够利用,VBE,界面,【,视图,】,菜单命令或工具栏中按钮实现。,第71页,(,3,)系统常量,系统定义常量有七个:,True,、,False,、,Null,、,Yes,、,No,、,On,和,Off
35、系统常量能够在全部应用程序中直接使用。,第72页,2,、变量,变量名,、变量,数据类型,和,变量值,是变量三要素。变量由变量名标识。,(,1,)变量命名规则,变量名只能由字母、数字、汉字和下划线组成,不能含有空格和除下划线之外其它字符,长度不能超出,255,个字符。,变量名必须以字母(包含汉字)开头,且不区分字母大小写。,变量名不能使用,VBA,关键字,不能与,VBA,过程、函数和方法名同名。,同一作用域内变量名必须唯一。,注意区分变量命名规则与字段名命名规则(,P63,)。,第73页,(,2,)变量申明方法,变量申明方式有两种:,隐式申明,和,显式申明,。,隐式申明,隐式申明是没有使用
36、dim,、,Public,、,Private,和,Static,等关键字来定义变量,而是直接使用变量。,隐式声明变量若其后无类型说明符来指明其数据类型时,默认为,变体数据类型,。,隐式声明变量只在,当前过程中有效,(即为局部变量)。,【,例,】,x=ABC,y=123,第74页,显式申明,Dim,语句,语法格式:,Dim,变量名,1,As,数据类型,_,变量名,2,As,数据类型,说明:,假如不使用,As,选项来定义变量数据类型,系统默认该变量为,Variant,数据类型。,Dim,语句一行中能够申明多个变量,各变量申明之间用逗号分隔。,显式声明是指用,Dim,、,Private,、,Pub
37、lic,、,Static,语句来定义变量数据类型。,第75页,【,例,】,Dim a1 As Integer,将,a1,定义为整型,Dim a2 As Double,将,a2,定义为双精度型,Dim a3 As String,a4 As Date,将,a3,定义为字符型,,a4,为日期型,Dim m,m,为变体型变量,Dim x,y,z As Single,x,、,y,为变体型变量,z,为单精度型变量,第76页,类型说明符,(,隐式申明,),使用类型说明符定义变量数据类型时,必须将其放在变量名最终(各种类型说明符详见教材,P262,)。,类型说明符定义变量属于隐式申明。,【,例,】,Var1,
38、1234,Var2,#,=123.45,Var3,$,=abc“,%,:短整数,#,:双精度数,&,:长整数,$,:字符串,!,:单精度,:货币,第77页,VBA,在判断一个变量数据类型时,按以下次序进行:,Dim,语句,数据类型说明符,。,没有使用,Dim,语句或类型说明符申明变量,系统默认其为变体数据型。,为了防止使用隐式申明变量,能够在程序开始处使用,Option Explicit,语句来强制使用显式申明变量。在该方式下,假如变量没有经过显示申明或使用类型说明符,系统将提醒错误。,第78页,(,3,)变量使用范围,因变量定义位置与方式不一样,变量作用域也有所不一样。,局部变量,(过
39、程级别变量),局部变量只能在定义它过程内使用,在其它过程中无法存取局部变量。,私有变量,(私有模块级别变量),私有变量只能在定义它模块及其子过程内使用,而在其它模块中无法使用。,公共变量,(公共模块级别变量),在任何模块和过程中都能够访问公共变量。公共变量需要在模块申明区域用,Public,申明。,第79页,公共变量和私有变量必须在模块(或窗体),申明区域,中申明。,语法格式:,Public|Private,变量名,As ,数据类型,功效:,定义全局变量或私有变量。,说明:,全局变量必须在模块申明区域用,Public,定义。,私有变量必须在模块申明区域用,Private,或,Dim,定义。,在
40、过程中用,Dim,定义一定是局部变量。,第80页,局部变量,私有变量,全局变量,申明方式,DimStatic,DimPrivate,Public,申明位置,在子过程中,在窗体/模块申明区域,在标准模块申明区域,能否被本模块其它过程存取,不能,能,能,能否被其它模块过程存取,不能,不能,能,Static,是在过程级别中使用,用于申明变量并分配其存放空间。在整个代码运行期间都能保留使用,Static,语句申明变量值,且该变量与过程外其它同名变量无关。,3,种变量定义方法及其作用域,第81页,3,、数组,数组是用相同名称保留一组有序数据集合,普通情况下该集合中数据元素数据类型是相同。,数组元素由,数
41、组名,和,数组下标,组成,第一个数组元素下标称为数组下界,最终一个元素下标称为数组上界。,第82页,(,1,)数组申明,VBA,中不允许隐式说明数组,即数组在使用前必须用,Public,、,Private,或,Dim,语句进行申明,说明数组大小、数据类型及作用范围。,语法格式:,Dim,数组名,(,下标下界,to,下标上界,)As,数据类型,Dim,数组名,(,下标,下界,to,下标,上界,)As,数据类型,说明:,假如申明了数组数据类型,则数组中全部元素必须赋于相同或能够转换数据类型。,As,选项缺省时,数组中各元素为变体数据型。,第83页,下标下界默认值为,0,,假如设置下标下界为非,0,
42、值,则要使用,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,第84页,能够在模块通用,申明,部分用,Option Base,来指定数组默认下标下界。,Option Base 1,设置数组下标下界为,1,Option Base 0,(语句默认形式),设置数组下标下界为默认值,第85页,(,2,)数组类型,按照数组申明方式,能够将数组分为两种类型:,静态(固定)数组,和,
43、动态数组,。,静态(固定)数组,静态数组中元素个数在申明时被指定,静态数组在程序运行过程中不能改变数组元素个数,【,例,】,Dim a1(5)As Integer,Dim a2(1 to 5),Dim a3(3,5)As Long,第86页,动态数组,动态数组中元素个数在申明时不指定,动态数组在程序运行中能够改变数组元素个数,动态数组定义步骤:,用,Dim,语句声明一个空维数组,即:不指定数组大小,Dim b1(),使用数组时用,ReDim,语句来指定数组大小,ReDim b1(2,3),第87页,说明:,ReDim,语句只能出现在过程中,能够改变数组大小、上下界和,数组维数,。,使用,ReD
44、im,重新申明数组后,原有数组元素中值将全部去除并取其,默认值,。,注意教材,P268,叙述!,第88页,若要保留数组中元素原有值,则需在,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),5,10,第89页,带,Pr
45、eserve,选项,ReDim,语句能够改变数组中最终一维上界,但不能改变这一维下界,改变下界将造成错误。,若改变后数组比原来小,则多出数据将丢失。,第90页,【,例,】,第91页,【,例,】,第92页,(,3,)数组访问,数组申明后,数组中每个元素都能够单独使用,使用方法与相同数据类型普通变量相同。,语法格式:,数组名,(,下标值,),说明:,下标值是指定范围内(上下界之间)一个整数,其值不能超出这个范围。,假如是多维数组,则下标应是多个(不能多于数组维数),各整数间用逗号隔开。,【,例,】,a1(0,0)=ABC b1(3)=123,Debug.Print b1(3)+100,第93页,五
46、运算符和表示式,1,、运算符,运算符是表示实现某种运算符号。依据不一样运算,,VBA,中运算符可分为,4,种类型:,算术运算符,字符串运算符,关系运算符,逻辑运算符。,P269,第94页,(,1,)算术运算符,算术运算符用来执行简单算术运算。,VBA,提供了,8,种算术运算符(详见教材,P269,)。,运算符,名 称,优 先 级,说 明,乘幂运算,1,计算乘方和方根,-,取负运算,2,*,乘法运算,3,/,浮点除法,3,标准除法,结果为浮点数,整数除法,4,整数除法,结果为整数,Mod,取模运算,5,求余数,+,加法运算,6,-,减法运算,6,算术运算符两边操作数都应该是数值型,假如是数字字
47、符或逻辑型,则系统,自动将其转换成数值型,后再进行运算。,第95页,指数运算(,),求一个数某次方。,在利用乘方运算符时,只有当指数为整数值时,底数才能够为负数。,【,例,】,3 4 2 (1/2),81 1.4142,(-2)3(-2)(1/2),-8,犯错,True 3Flase (1/2),-10,第96页,整数除法(,),对两个操作数做除法运算并返回一个,整数,。,整数除法操作数普通为整型,当操作数是小数时,首先被,四舍五入为整型或长整型,,然后再进行整除运算。,假如运算结果是小数,系统自动将其,截断,为整型或长整数,,不再进行四舍五入处理。,第97页,【,例,】,11/3,3.666
48、667 (,浮点除法,),13.5 3,4 (,整数除法,操作数先被四舍五入,),11 3,3 (,整数除法,运算结果不做四舍五入,),7 3,2 (,字符串先转换为数值型,),5 2*3,0 (,乘法运算级别高于整除,),3.56 7/3.5,2 (,浮点除法级别高于整除,),第98页,取模运算(,Mod,),对两个操作数做除法运算并返回,余数,。,假如操作数有小数时,系统自动将其,四舍五入为整数后再进行运算,。,结果正负号,与,被除数,相同,。,第99页,【,例,】,11 Mod 3,2,12 Mod 3,0,-11 Mod 3,-2,11 Mod -3,2,11.4 Mod 3,2,11
49、56 Mod 6.2,0,第100页,算术运算符两边操作数都应该是数值型,假如是,数字字符、逻辑型,则系统自动将其转换成数值型,后再进行运算;假如是日期型能够加(减)一个整数,表示后推(前推)若干天。,【,例,】,123+2 True+20,125 19,#-01-01#+1#12/31/1899#-1,#-1-2#0:00:00,#-10-1#-#-10-2#,-1,#1900-1-1#+#1900-1-2#,#1900-1-4#,第101页,(,2,)字符串运算符,字符串运算符就是将两个字符串连接起来生成一个新字符串。,字符串运算符有两个:,&,运算符、,+,运算符,第102页,&,运算
50、符,用于,强制,两个字符串连接。,因为符号,&,还是长整型定义符,在字符串变量使用运算符,&,时,,变量与运算符之间必须加一个空格,。,【,例,】,x&=123,xޝ-10-1#,作为长整型定义符,作为连接运算符,第103页,运算符,&,两边操作数能够是字符型、数值型或日期型。进行连接操作前先将操作数数据类型转换为字符型,然后再进行字符串连接。,【,例,】,123&ABC,aa=123,aa&ABC,aa&ABC,123ABC,定义变量并赋值,123ABC,犯错,第104页,+,运算符,用于连接两个字符串,形成一个新字符串。,运算符两边操作数必须都是,字符串,。,因为符号“,+,”,






