版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块与VBA程序设计第1页【本章主要掌握内容】
模块基本概念及其创建
VBA中数据类型
常量、变量与数组
VBA中运算符、表达式和函数
VBA流程控制语句
VBA数据库编程第2页▲VBA(VisualBasicforApplication)是VisualBasic语言在Office编程中应用。▲VBA就是用来创建Access模块对象编程语言。第3页第一节模块基本概念第4页▲模块是以VBA语言为基础编写,将一个或多个过程(子过程或函数过程)作为一个单元进行保留集合。模块中每个过程实现各自特定功能。▲利用模块能够将各种数据库对象连接起来,组成一个完整系统。▲在Access中,模块分为两种类型:
类模块
标准模块第5页一、类模块▲类模块是依附于某一窗体或报表而存在模块。▲窗体和报表中含有对象,每个对象都有自己固有事件过程,以响应窗体或报表中事件。▲为窗体或报表创建第一个事件过程时,系统会自动创建与之关联窗体或报表模块。▲在窗体或报表设计视图下,能够单击工具栏中【代码】按钮进入代码窗口。▲已经含有事件过程事件名称用黑色粗体表示。▲窗体或报表中模块作用范围仅局限于其所属窗体或报表内部,含有局部特征。第6页二、标准模块▲标准模块是不与任何对象相关联通用过程,这些过程可在数据库中任何位置直接调用执行。▲标准模块普通用于存放公共过程(子过程和函数过程),与其它任何Access对象不相关联。在Access系统中,经过模块对象创建代码过程就是标准模块。▲在标准模块中全局变量或公共过程,其作用范围在整个应用程序里,含有全局特征。第7页三、打开模块编辑窗口模块是在VBE(VisualBasicEditor)窗口中进行创建和编辑。能够经过以下方法打开标准模块VBE窗口:▲在【创建】选项卡【宏与代码】组中单击【模块】按钮(创建新模块)▲在【导航】窗格中选择【模块】类别,使用组合键Alit+F11(数据库窗口与VBE窗口之间切换)▲在【导航】窗格中右击某个模块对象,在快捷菜单中选择【设计视图】命令(打开该模块代码窗口)▲双击【导航】窗格中某个模块对象(打开该模块代码窗口)第8页在打开窗体或报表设计视图后,能够经过以下方法打开类模块VBE窗口:▲单击【窗体设计工具】中【设计】选项卡中【查看代码】按钮▲右击需要编辑代码控件,并在快捷菜单中选择【事件生成器】命令第9页第二节创建模块第10页
模块是以过程(或函数)为单元组成,一个模块包含两个部分:▲一个申明区域用于定义模块中使用变量等内容。▲若干个子过程与函数过程
☆过程是由代码组成单元,包含一系列计算语句和执行语句,用于完成特定操作。
☆过程名不能与所在模块模块名相同。模块申明区域子过程和函数定义区域第11页过程有两种类型:
☆Sub过程(子过程)☆
Function过程(函数过程)第12页1、Sub过程子过程以关键词Sub开始,以EndSub结束。语法格式:
[Public|Private][Static]Sub子过程名
([形参列表
][As数据类型
])[程序代码
][ExitSub][程序代码
]EndSub第13页说明:☆Public
过程能被全部模块全部其它过程调用。☆Private
过程只能被同一模块其它过程调用。☆Static
用于设置静态变量(局部变量)。
假如没有使用Public或Private指定,过程则是Public(默认情况);假如没有使用Static,则在调用之后不会保留局部变量值。第14页☆形参列表:即调用时接收传递给Sub过程参数变量列表。假如有多个变量,则多个变量之间用逗号隔开。☆如果Sub过程没有参数,过程名后也必须包含一个空圆括号。☆在形参表中能够用As来设置参数数据类型,未加As时,则参数为变体型数据。☆在过程执行中一旦碰到ExitSub语句,则结束过程执行。☆能够经过传递参数和使用参数来调用子过程,但子过程调用后不返回任何值。第15页【例】
PublicSubxx(mAsString,nAsInteger)……EndSub
PublicSubyy()……EndSub第16页
子过程调用形式有两种:语法格式一:
Call子过程名
[(实参列表
)]语法格式二:
子过程名
[实参列表
]说明:☆实参列表:在调用过程时用于传递给Sub过程变量列表,存在多个变量时,多个变量之间用逗号隔开。☆实参列表和形参列表必须一一对应。
用Call调用子过程是一个良好程序设计习惯,因关键词Call表明其后是过程名而不是变量名。第17页【例1】PublicSubxx(mAsString,nAsInteger)Debug.Printm&nEndSubPublicSubyy()Callxx("ABC",5)EndSub运行子过程yy,即在马上窗口中显示:ABC5第18页2、Function过程在VBA除系统提供标准函数外,还能够由用户自行定义函数过程(用户自定义函数)。函数过程和子过程在功效上略有不一样:
主程序调用过程后是执行了一个过程;
主程序而调用函数后是得到了一个结果。第19页
函数过程是以Function开始,以EndFunction结束。语法格式:
[Public|Private][Static]Function函数名
([形参列表
])[AS数据类型
][程序代码
][ExitFunction]
函数名
=表示式
[程序代码
]EndFunction第20页说明:☆AS数据类型:定义函数返回值数据类型。假如未定义,则系统将自动赋给函数过程一个最适当数据类型。☆函数名
=表示式:函数体中对函数名进行赋值语句,使函数得到一个返回值。☆函数定义中,必须最少含有一条给函数名赋值语句。假如没有此语句,将依据As语句定义数据类型而返回0或空字符串或空值。☆在函数过程执行中一旦碰到ExitFunction语句,则结束函数过程执行。第21页【例2】把0到9中数字转换成大写汉字
Functionvtoc(xAsInteger)AsStringDimcResultAsStringDimnAsStringcResult=""n="零壹贰叁肆伍陆柒捌玖"cResult=mid(n,x+1,1)
vtoc=cResultEndFunction第22页
函数过程调用形式:语法格式:
<函数过程名>([实参列表
])说明:☆因为函数有返回值,所以调用时不能用Call命令,而是直接引用函数名并加括号。☆假如用Call命令调用函数,VBA将放弃函数返回值。☆函数过程返回值能够直接赋给某个变量。【例】s=vtoc(4)第23页【例3】编写一个能够以年、月、日来返回系统日期函数过程Getdate。FunctionGetdate()AsStringGetdate=Year(Date)&"年"_&Month(Date)&"月"_&Day(Date)&"日"EndFunction
调用上述函数,并将结果在马上窗口中显示。
SubPdate()
Debug.PrintGetdate()EndSub第24页第三节VBA程序设计基础第25页一、面向对象程序设计基本概念所谓面向对象能够这么定义:面向对象=类+对象+属性继承+对象之间通信一个面向对象应用系统中,每一个组成部分都是对象,所需实现操作则经过建立对象与对象之间通信来完成。第26页1、对象
客观世界里任何实体都能够被看作是对象。对象能够是详细物,也能够指一些概念。
在面向对象程序设计中,对象代表应用程序中元素,包含表、窗体、按钮等。
每个对象都含有自己属性、事件和方法;用户就是经过属性、事件和方法来处理对象。第27页2、对象属性及属性值
属性是对象特征,用来表示对象状态。
不一样类型对象,其属性会有所不一样;同类别对象不一样实例,属性值也会有差异。
既能够在创建对象时给对象设置属性值,也能够在执行程序时经过命令修改对象属性值。第28页3、事件和事件过程
事件是对象能够识别一个动作。
为使对象在某一事件发生时能够做出所需要反应,必须针对这一事件编写对应代码来完成对应功效。
假如已经编写了某个对象事件代码,那么当此事件发生时,这段事件代码将被自动激活并开始执行;假如事件没有发生,则此段代码永远不会被执行。
假如没有为对象编写事件代码,那么即使事件发生了,也不会产生任何动作。第29页4、方法
方法是对象能够执行一个动作,即当对象接收了某个消息后所采取一系列操作描述。
相同类对象含有相同方法,不一样类对象所含有方法也有所不一样。第30页
每个对象都含有属性,以及与之相关事件和方法,面向对象程序设计就是经过对象属性、事件和方法来处理对象。对象属性事件方法第31页
能够在程序代码中引用对象属性或调用对象方法。语法格式:
[父对象名!]对象名.属性名
[父对象名!]对象名.方法名
父对象与子对象之间用“!”连接;
对象与属性(方法)之间用“
.”连接。第32页5、类
类是面向对象程序设计中关键。是对一类相同对象集合,这些对象含有相同性质、相同种类属性以及方法。
类是对象抽象,而对象是类详细实例。有了类定义后,基于类就能够生成这类对象中任何一个对象。这些对象即使采取相同属性来表示状态,但它们在属性上取值完全能够不一样。这些对象普通有着不一样状态,且彼此间相对独立。第33页6、DoCmd对象
DoCmd是Access数据库一个特殊对象,它是经过调用Access内置方法,在程序中实现一些特定操作。语法格式:
DoCmd.方法名
[参数]说明:
DoCmd对象大多数方法都有参数,有些是必需,有些则是可选。若缺省,将采取默认参数。第34页(1)用DoCmd对象打开窗体语法格式:
DoCmd.OpenForm"窗体名"功效:用默认形式打开指定窗体第35页(2)用DoCmd对象关闭窗体语法格式一:
DoCmd.CloseacForm,"窗体名"功效:关闭指定窗体语法格式二:
DoCmd.Close功效:关闭当前窗体第36页(3)用DoCmd对象打开报表语法格式:
DoCmd.OpenReport"报表名",acViewPreview功效:用预览形式打开指定报表第37页(4)用DoCmd对象关闭报表语法格式一:
DoCmd.CloseacReport,"窗体名"功效:关闭指定报表语法格式二:
DoCmd.Close功效:关闭当前报表第38页(5)用DoCmd对象运行宏语法格式:
DoCmd.RunMacro"宏名"功效:运行指定宏(6)用DoCmd对象退出Access语法格式:
DoCmd.Quit功效:关闭全部Access对象和Access本身第39页(7)用DoCmd对象执行宏语法格式:
DoCmd.RunMacro"宏名"[,运行次数
][,数值表示式
]功效:运行指定宏说明:☆运行次数用于计算宏运行次数☆数值表示式在每一次运行宏时进行计算,结果为False时,停顿运行宏。第40页二、VBA编程环境:VBEVBE是编辑VBA代码时使用界面。在VBE编辑器中能够编写VBA函数和过程。使用Alt+F11能够实现数据库窗口和VBE之间切换。第41页1、VBE窗口组成
VBE使用各种窗口来显示不一样对象或是完成不一样任务。VBE窗口主要包含:标准工具栏工程窗口属性窗口代码窗口对象组合框事件组合框监视窗口马上窗口当地窗口第42页(1)标准工具栏▲Access视图▲插入模块……▲运行子过程/用户窗口▲中止运行▲终止运行/重新设计▲设计模式▲工程项目管理器▲属性窗体▲对象浏览器(各按钮功效参见教材P260)第43页(2)工程窗口(工程资源管理器)在Access中所谓工程就是指一个数据库应用系统。系统中全部类对象和模块对象都在工程窗口中显示。工程窗口以层次结构列表形式显示当前数据库中全部模块文件。鼠标双击其中之一,即打开其代码窗口。▲【查看代码】按钮打开对应代码窗口▲【查看对象】按钮打开对应对象窗口▲【切换文件夹】按钮隐藏或显示对象分类文件夹第44页(3)属性窗口属性窗口列出了选定对象属性,方便查看、修改这些属性。若选取了多个控件,属性窗口中列出是全部控件共同属性。▲对象框用于选择对象▲属性列表用于显示和修改对象属性。属性列表能够按分类或按字母进行排序。
直接在属性窗口中设置对象属性,称“静态”设置;在代码窗口中,用VBA代码设置对象属性称“动态”设置。第45页(4)代码窗口代码窗口用于显示、编写及修改VBA代码。系统允许打开多个代码窗口,以查看不一样学体或模块中代码。▲对象下拉列表框显示对象名称。用于查看或选择其中对象。▲过程/事件下拉列表框显示与所选对象相关事件。能够依据需要选择相应事件。▲自动提醒信息框依据已经输入内容作出对应提醒。第46页(5)马上窗口马上窗口是用来进行快速表示式计算、简单方法操作及进行程序测试工作窗口。
在马上窗口中能够输入或者粘贴一行代码并执行该代码(按Enter键),执行结果将在马上窗口中显示。语法格式:
?
<变量名或表示式>
在代码窗口中编写代码时,假如要在马上窗口中显示变量或表示式值,则使用Debug语句。语法格式:
Debug.Print
<变量名或表示式>
马上窗口中代码及运行结果是不会被保留。第47页(6)监视窗口在调试VBA程序时,能够利用监视窗口显示正在运行过程定义监视表示式值。(7)当地窗口使用当地窗口能够自动显示正在运行过程中全部变量申明及变量值。
以上窗口均能够用鼠标进行拖拉操作或关闭操作;也能够经过【视图】菜单使其显示。第48页2、进入VBE编程环境代码窗口是设计人员主要操作界面。双击工程窗口中任何对象,都能够在代码窗口中打开该对象对应模块代码。进入VBE编程环境方法有各种,对于类模块,其方法有:★方法一①打开窗体或报表设计视图,并选择对象②单击【属性】对话框中【事件】选项卡③选择某个事件并设置属性为“事件过程”④单击属性右侧“…”按钮
打开窗体或报表设计视图后若无【属性】对话框,则能够由以下方法之一打开:☆单击【窗体设计工具】中【设计】选项卡中【属性表】按钮☆组合键:Alt+Enter第49页★方法二①打开窗体或报表设计视图,并选择对象②选择属性对话框中【事件】选项卡③直接单击某个事件右侧“…”按钮④在打开对话框中选择【代码生成器】★方法三①打开窗体或报表设计视图②单击【窗体设计工具】中【设计】选项卡中【查看代码】按钮第50页对于标准模块,其方法有:★方法一
在【创建】选项卡【宏与代码】组中,单击【模块】按钮(创建一个新模块)★方法二
双击数据库导航窗格中选择需要打开模块对象(修改已经存在标准模块)★方法三
在【数据库工具】选项卡【宏】组中,单击【VisualBasic】按钮(仅进入VBE环境。类似于使用组合键Alt+F11)第51页3、VBA程序书写标准(1)语句书写要求
通常一个语句写一行
语句较长分行写时,可用续行符“_”将语句连续写在下一行(续行符前需加一个空格)
可以用冒号“:”将多条短语句写在同一行中
为显示程序流程结构,能够采取缩进格式书写程序。
代码设计时,可按F1键显示帮助信息。第52页(2)注释语句为增加程序可读性,可在程序中设置注释语句。注释语句能够添加到程序模块任何位置,且不会被执行。语法格式一:
Rem<注释语句>(在其它语句之后出现时要用冒号分隔)语法格式二:
'<注释语句>(可直接位于其它语句之后)
注释语句默认以绿色文本显示。第53页(3)语法检验在代码窗口输入语句时,VBA会自动进行语法检验,即:
当输入一行语句并按Enter键后,假如该语句存在语法错误,则此行代码以红色文本显示,并显示一条错误信息。
必须找出语句中错误并更正后才能够进行下一步操作。
注意语法检验执行时机。第54页三、数据类型
VBA在数据类型和定义方式上均继承了传统Basic语言特点。
Access数据库在创建表时所使用字段数据类型在VBA中都有对应类型(OLE对象型、备注型和自动编号数据类型除外)。
在申明变量数据类型时,既能够使用数据类型名,也能够使用符号来定义。(详见教材P262)第55页1、字符型(String)
货币型数据(Currency)▲字符型常量必须要用一对英文半角双引号括起来。▲货币型数据整数部分最多可达15位,小数位数最多只能使用4位。第56页2、布尔型数据(Boolean)布尔型数据也称逻辑型数据,其数据值只有两个:True和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/dd/yyyy第58页
以数字序列表示日期时:
☆小数点左边表示日期:1为1899年12月31日
☆小数点右边表示时间:0为午夜0点0.5为中午12点
☆负数表示1899年12月31日之前日期【例】Subaa()DimdAsDated=1.1Debug.PrintdEndSub1899-12-3102:24:00第59页4、变体型数据(Variant)
如果没有指定变量详细数据类型,则系统默认该变量为变体型数据型。
变体型是一个特殊数据类型,除了定长字符数据及用户自定义类型外,能够包含任何种类数据,详细类型由最近所赋值确定。
变体型数据可以包含Empty、Error、Nothing及Null等特殊值。
能够用VarType和TypeName函数来检测Variant中数据类型。第60页5、对象型数据(Object)
对象型数据用来表示图形、OLE对象或其它对象。
对象型数据占4个字节存放空间。
对象型变量可引用应用程序中对象。第61页6、用户自定义数据类型
用户自定义数据类型是由用户自行建立,由一个或多个VBA标准数据类型或其它用户自定义数据类型组合而成一个数据类型。
用户自定义数据类型在关键字Type…EndType之间定义。语法格式:
Type<数据类型名
> <域名1>As<数据类型
> <域名2>As<数据类型
> ……EndType第62页【例】自定义一个新类型MyType,该类型中包含3个元素,分别命名为:MyName(字符型)、MyBirthday(日期型)、MySex(逻辑型)。TypeMyTypeMyNameAsStringMyBirthdayAsDateMySexAsBooleanEndType定义类型以后就能够象普通类型一样定义变量DimNewStuAsMyType第63页
用户自定义数据类型变量赋值时,使用以下语法格式:语法格式:
变量名
.元素名=
变量值【例】DimNewStuAsMyTypeNewStu.MyName="史建平"NewStu.MyBirthday=#1988-10-01#NewStu.MySex=True第64页
能够用关键字With…EndWith简化赋值中重复部分。【例】DimNewStuAsMyTypeWithNewStu
.MyName="史建平"
.MyBirthday=#1988-10-01#
.MySex=TrueEndWith第65页Access与VBA数据类型对比含义Access数据类型VBA数据类型字节型ByteByte短整型Short、SmallIntInteger长整型Integer、Int、LongLong单精度型Single、RealSingle双精度型Double、NumberDouble字符型Char、Text、StringString货币型Currency、MoneyCurrency逻辑型Logical、YesNoBoolean日期型Date、TimeDate对象型OLEObject、GeneralObject变体类型不支持Variant第66页四、常量、变量与数组
常量是在程序运行过程中,其值不能被改变量。
变量是用于存放在程序运行时其值能够发生变化量。
每个变量都有其变量名,使用变量前能够指定其数据类型,也能够不指定其数据类型。
数组是由一组含有相同数据类型变量(即数组元素)组成集合。第67页1、常量
Access中常量有3种类型:☆符号常量用Const语句创建,并且在模块中使用常量。☆内部常量是Access或引用库一部分。☆系统常量
True、False、Null、Yes、No、On和Off等。第68页(1)符号常量
假如在代码中要重复使用某个相同值,或者代表一些含有特定意义数字或字符串,能够使用符号常量。符号常量用Const语句来创建,创建时给出常量值。语法格式:
[Public|Private]Const
符号常量名[As数据类型]=符号常量值【例】
PublicConstPIAsSingle=3.1415927ConstNationalDayAsDate=#1949-10-1#第69页
在程序运行过程中,符号常量只能作读取操作,不允许修改或为其重新赋值。
不允许创建与内部常量和系统常量同名符号常量。
假如用As选项定义了符号常量数据类型,且所赋值数据类型与定义数据类型不相同,那么,系统自动将值数据类型转换为所定义数据类型;假如不能转换将显示错误提醒。
符号常量有3个作用范围级别:局部级别(过程级别)、私有级别和公共级别。
符号常量普通以大写字母命名,方便与变量区分(变量普通用小写字母命名)。第70页(2)内部常量
VBA提供了一些预定义内部符号常量,它们主要作为DoCmd命令语句中参数。
内部常量以ac两个前辍字母指明了定义该常量对象库,如:acForm、acCmdsaveAs等。
经过对象浏览器可以查看全部可用对象库中内部常量。
【对象浏览器】调用能够利用VBE界面【视图】菜单命令或工具栏中按钮实现。第71页(3)系统常量
系统定义常量有七个:True、False、Null、Yes、No、On和Off。
系统常量能够在全部应用程序中直接使用。第72页2、变量
变量名、变量数据类型和变量值是变量三要素。变量由变量名标识。(1)变量命名规则
变量名只能由字母、数字、汉字和下划线组成,不能含有空格和除下划线之外其它字符,长度不能超出255个字符。
变量名必须以字母(包含汉字)开头,且不区分字母大小写。
变量名不能使用VBA关键字,不能与VBA过程、函数和方法名同名。
同一作用域内变量名必须唯一。注意区分变量命名规则与字段名命名规则(P63)。第73页(2)变量申明方法变量申明方式有两种:隐式申明和显式申明。▲隐式申明
隐式申明是没有使用dim、Public、Private和Static等关键字来定义变量,而是直接使用变量。
隐式声明变量若其后无类型说明符来指明其数据类型时,默认为变体数据类型。
隐式声明变量只在当前过程中有效(即为局部变量)。【例】x="ABC"y=123第74页▲显式申明
Dim语句语法格式:Dim变量名1
[As数据类型
],_变量名2
[As数据类型
],……说明:☆假如不使用As选项来定义变量数据类型,系统默认该变量为Variant数据类型。☆
Dim语句一行中能够申明多个变量,各变量申明之间用逗号分隔。
显式声明是指用Dim、Private、Public、Static语句来定义变量数据类型。第75页【例】Dima1AsInteger
将a1定义为整型
Dima2AsDouble
将a2定义为双精度型
Dima3AsString,a4AsDate
将a3定义为字符型,a4为日期型
Dimm
m为变体型变量
Dimx,y,zAsSingle
x、y为变体型变量
z为单精度型变量第76页
类型说明符(隐式申明)使用类型说明符定义变量数据类型时,必须将其放在变量名最终(各种类型说明符详见教材P262)。类型说明符定义变量属于隐式申明。【例】
Var1%
=1234
Var2#
=123.45
Var3$
="abc“%:短整数#:双精度数&:长整数$:字符串!:单精度@:货币第77页VBA在判断一个变量数据类型时,按以下次序进行:Dim语句
数据类型说明符。没有使用Dim语句或类型说明符申明变量,系统默认其为变体数据型。
为了防止使用隐式申明变量,能够在程序开始处使用OptionExplicit语句来强制使用显式申明变量。在该方式下,假如变量没有经过显示申明或使用类型说明符,系统将提醒错误。第78页(3)变量使用范围因变量定义位置与方式不一样,变量作用域也有所不一样。☆局部变量(过程级别变量)局部变量只能在定义它过程内使用,在其它过程中无法存取局部变量。☆私有变量(私有模块级别变量)私有变量只能在定义它模块及其子过程内使用,而在其它模块中无法使用。☆公共变量(公共模块级别变量)在任何模块和过程中都能够访问公共变量。公共变量需要在模块申明区域用Public申明。第79页
公共变量和私有变量必须在模块(或窗体)申明区域中申明。语法格式:
Public|Private变量名
As[数据类型
]功效:定义全局变量或私有变量。说明:☆全局变量必须在模块申明区域用Public定义。☆私有变量必须在模块申明区域用Private或Dim定义。☆在过程中用Dim定义一定是局部变量。第80页局部变量私有变量全局变量申明方式Dim
StaticDim
PrivatePublic申明位置在子过程中在窗体/模块申明区域在标准模块申明区域能否被本模块其它过程存取不能能能能否被其它模块过程存取不能不能能Static是在过程级别中使用,用于申明变量并分配其存放空间。在整个代码运行期间都能保留使用Static语句申明变量值,且该变量与过程外其它同名变量无关。3种变量定义方法及其作用域第81页3、数组
数组是用相同名称保留一组有序数据集合,普通情况下该集合中数据元素数据类型是相同。
数组元素由数组名和数组下标组成,第一个数组元素下标称为数组下界,最终一个元素下标称为数组上界。第82页(1)数组申明
VBA中不允许隐式说明数组,即数组在使用前必须用Public、Private或Dim语句进行申明,说明数组大小、数据类型及作用范围。语法格式:Dim数组名([下标下界
to]下标上界
)[As数据类型]Dim数组名([下标下界
to]下标上界[,…])[As数据类型]说明:
假如申明了数组数据类型,则数组中全部元素必须赋于相同或能够转换数据类型。
As选项缺省时,数组中各元素为变体数据型。第83页
下标下界默认值为0,假如设置下标下界为非0值,则要使用to选项。【例】Dimaa(5)AsStringDimbb(1to10,1to20)Dimcc(2,2to5,5)AsInteger
该数组是一个3维数组:第1维下标:0~2
第2维下标:2~5
第3维下标:0~5第84页
能够在模块通用申明部分用OptionBase来指定数组默认下标下界。
☆OptionBase1
设置数组下标下界为1
☆OptionBase0(语句默认形式)
设置数组下标下界为默认值第85页(2)数组类型按照数组申明方式,能够将数组分为两种类型:静态(固定)数组和动态数组。▲静态(固定)数组
☆静态数组中元素个数在申明时被指定
☆静态数组在程序运行过程中不能改变数组元素个数【例】Dima1(5)AsIntegerDima2(1to5)Dima3(3,5)AsLong第86页▲动态数组
☆动态数组中元素个数在申明时不指定
☆动态数组在程序运行中能够改变数组元素个数★动态数组定义步骤:①用Dim语句声明一个空维数组,即:不指定数组大小
Dimb1()②使用数组时用ReDim语句来指定数组大小
ReDimb1(2,3)第87页说明:☆ReDim语句只能出现在过程中,能够改变数组大小、上下界和数组维数。☆使用ReDim重新申明数组后,原有数组元素中值将全部去除并取其默认值。
注意教材P268叙述!第88页☆若要保留数组中元素原有值,则需在ReDim语句中加Preserve选项。【例】
Dima1()AsStringReDima1(5)ReDimPreservea1(UBound(a1)+5)
UBound(arrayname[,dimension])函数功效是:返回数组指定维最大可用下标。【例】
Dimb1(5,10)Debug.PrintUBound(b1,1)Debug.PrintUBound(b1,2)510第89页☆带Preserve选项ReDim语句能够改变数组中最终一维上界,但不能改变这一维下界,改变下界将造成错误。☆若改变后数组比原来小,则多出数据将丢失。第90页【例】第91页【例】第92页(3)数组访问数组申明后,数组中每个元素都能够单独使用,使用方法与相同数据类型普通变量相同。语法格式:
数组名(下标值
)说明:☆下标值是指定范围内(上下界之间)一个整数,其值不能超出这个范围。☆假如是多维数组,则下标应是多个(不能多于数组维数),各整数间用逗号隔开。【例】a1(0,0)="ABC" b1(3)=123Debug.Printb1(3)+100第93页五、运算符和表示式1、运算符运算符是表示实现某种运算符号。依据不一样运算,VBA中运算符可分为4种类型:
☆算术运算符
☆字符串运算符
☆关系运算符
☆逻辑运算符。P269第94页(1)算术运算符算术运算符用来执行简单算术运算。VBA提供了8种算术运算符(详见教材P269)。运算符名称优先级说明^乘幂运算1计算乘方和方根-取负运算2*乘法运算3/浮点除法3标准除法,结果为浮点数\整数除法4整数除法,结果为整数Mod取模运算5求余数+加法运算6-减法运算6
算术运算符两边操作数都应该是数值型,假如是数字字符或逻辑型,则系统自动将其转换成数值型后再进行运算。第95页
指数运算(^)求一个数某次方。
☆在利用乘方运算符时,只有当指数为整数值时,底数才能够为负数。【例】3^4 2^(1/2)
81 1.4142(-2)^3 (-2)^(1/2)
-8 犯错True^3 Flase^(1/2)
-1 0第96页
整数除法(\)对两个操作数做除法运算并返回一个整数。
☆整数除法操作数普通为整型,当操作数是小数时,首先被四舍五入为整型或长整型,然后再进行整除运算。
☆假如运算结果是小数,系统自动将其截断为整型或长整数,不再进行四舍五入处理。第97页【例】11/3 3.666667(浮点除法)13.5\3
4(整数除法,操作数先被四舍五入)11\3 3(整数除法,运算结果不做四舍五入)"7"\"3" 2(字符串先转换为数值型)5\2*3 0(乘法运算级别高于整除)3.56\7/3.5 2(浮点除法级别高于整除)第98页
取模运算(Mod)对两个操作数做除法运算并返回余数。
☆假如操作数有小数时,系统自动将其四舍五入为整数后再进行运算。
☆结果正负号与被除数相同。第99页【例】11Mod3
212Mod3 0-11Mod3
-211Mod-3
211.4Mod3
211.56Mod6.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页
&
运算符用于强制两个字符串连接。☆因为符号&还是长整型定义符,在字符串变量使用运算符&时,变量与运算符之间必须加一个空格。【例】
x&=123
xޝ-10-1#作为长整型定义符作为连接运算符第103页☆运算符&两边操作数能够是字符型、数值型或日期型。进行连接操作前先将操作数数据类型转换为字符型,然后再进行字符串连接。【例】123&"ABC"aa=123aa&"ABC"aa&"ABC"123ABC定义变量并赋值123ABC犯错第104页
+运算符用于连接两个字符串,形成一个新字符串。☆运算符两边操作数必须都是字符串。☆因为符号“+”还是算术运算符,所以:
如果两边操作数都是数值型,则进行普通加法运算。
如果一个是数值型,另一个为数字字符串,则系统自动将数字字符串转化为数值,然后进行加法运算。
如果一个是数值型,另一个为非数字字符串,则犯错。第105页【例】"ABC"&123 "ABC"+"123"
ABC123 ABC123"12.5"&24 "12.5"+24
12.524 36.5"A12.5"&24 "A12.5"+24
A12.524 犯错"123.5"-09-11#
123.5-9-1112.5-10-01# 12.5-10-1#-09-01#+10 #9999-12-31#+1 -9-11 溢出运算符"&"与"+"比较日期所能表示范围:
100年1月1日至9999年12月31日注:年份假如是两位数
0~29之间,系统解释为~2029年
30~99之间,系统解释为1930~1999年第106页在VBA中,运算符"
+"既可用作加法运算符,也能够用作字符串运算符,但运算符"&"专门作为字符串运算符。所以在有些情况下,用"&"比用"+"可能更为安全。第107页(3)关系运算符关系运算符用于对两个表示式比较大小,比较结果将是一个逻辑值,即:若关系成立,则为真(True);反之则为假(False)。
VBA提供了6种关系运算符(见教材P271)。名称运算符举例说明
等于="abc"="abd"False
大于
大于等于
小于等于
小于
不等于>>=<=<<>"abc">"abd"45<123"45"<="123"#-1-1#>=#-1-1#"abcd"<>"ABCD"FalseTrueTrueFalseFalse第108页在使用关系运算符时应注意以下标准:
假如参加比较两个操作数都是数值型,则按它们大小进行比较。
假如参加比较两个操作数都是字符型,则从左到右一一对应比较。
☆字母不区分大小写,且大于数字字符。
☆汉字字符按汉语拼音比较大小,且大于西文字符。
☆字符大小次序:
汉字字符>字母(按字母次序且大小写相同)>数字>空格注意教材P271叙述。第109页
在VBA中,允许部分不一样数据类型量进行比较,如:
数值型与逻辑型
数值型与日期型
日期型与逻辑型
日期型与数字字符
数值型与数字字符注:均转换为数值型后再进行比较。第110页(4)逻辑运算符逻辑运算符用于对两个逻辑量进行逻辑运算,其结果依然是一个逻辑值。VBA逻辑运算主要为:
AND
(与运算)
OR
(或运算)
NOT
(非运算)逻辑运算符说明Not当Not连接表示式为真时,整个表示式值为假And当And连接表示式均为真时,整个表示式值为真,不然为假Or当Or连接表示式均为假时,整个表示式值为假,不然为真第111页
各个逻辑运算符真值表XYNotXXAndYXOrYTrueTrueTrueFalseFalseTrueFalseFalseFalseTrueTrueFalseFalseTrueTrueFalseTrueTrueFalseFalseP271第112页2、表示式(1)表示式组成
表达式由字面值、常量、变量、运算符、函数、标识符、逻辑量和括号等按一定规则组成。
表达式经过运算得出结果,运算结果数据类型由操作数数据类型和运算符共同决定。
在算术运算表示式中,参加运算操作数可能含有不一样数据精度,VBA要求:运算结果数据类型采取精度高数据类型。第113页(2)表示式书写规则
要改变运算符运算次序,只能使用圆括号且必须成对出现;
乘号不能省略;
表达式从左至右书写,字母无大小写区分。注意:计算机表示式与数学不一样第114页(3)运算优先级在一个运算表示式中,假如含有各种不一样类型运算符,则运算进行先后次序由运算符优先级决定。优先级高低高
低算术运算符字符串运算符关系运算符逻辑运算符指数运算^优先级相同优先级相同Not取反-
And乘法和除法*/Or整数除法\模运算Mod加法和减法+-
圆括号优先级别最高,所以能够用圆括号改变表示式运算次序。P272第115页【例】100/5^2 412/5*2
4.812\5*2
1-12Mod5*2
-23+4*2>"12"+"34" False第116页【例】15<8+2*2Or2>FalseAnd"A"&"12"<"B"15<12Or2>FalseAnd"A"&"12"<"B"15<12Or2>FalseAnd"A12"<"B"
FalseOrTrueAndTrueFalseOrTrue
True第117页六、函数
VBA提供了近百个内置标准函数,以方便完成许多操作。函数标准形式:
函数名(参数列表)说明:☆函数名不可缺省,这是函数标识。☆函数参数能够是常量、变量或表示式,且置于函数名后圆括号中;参数能够是一个或多个,多个参数之间用逗号隔开。☆函数无参数时,其后圆括号能够省略。☆函数被调用时,都会返回一个特定类型值。第118页
学习函数关键点:
函数名、函数功效和语法格式
参数个数、数据类型以及每个参数含义(包含缺省时含义及默认值)
函数返回值及其数据类型第119页1、数学函数(1)绝对值函数语法格式:
Abs(Number)功效:返回参数绝对值返回值数据类型:数值型说明:
Number是任何有效数值表示式。【例】
Abs(-25) 25Abs(100\24.5-25)
21第120页(2)向下取整函数语法格式:
Int(Number)功效:返回参数向下取整值返回值数据类型:数值型说明:参数为负值时返回小于等于参数值最大负数。【例】
Int(2.5) 2Int(-2.5)
-3第121页(3)取整函数语法格式:
Fix(Number)功效:返回参数整数部分返回值数据类型:数值型说明:参数为负值时返回大于等于参数值最小负数(注意与Int函数不一样之处)。【例】
Int(2.5) Fix(2.5) 2 2Int(-2.4) Fix(-2.4)
-3 -2第122页(4)开平方函数语法格式:
Sqr(Number)功效:计算参数平方根返回值数据类型:双精度型说明:
Number值必须大于等于0。【例】
Sqr(9) Sqr(Abs(-16)) 3 4第123页(5)三角函数语法格式:
Sin(Number)Cos(Number)Tan(Number)功效:计算参数正弦、余弦和正切值返回值数据类型:双精度型说明:参数是以弧度为单位角度值。【例】ConstPIASSingle=3.1415927
Sin(PI/6) Tan(PI/4) 0.500000 1.000000第124页(6)随机函数语法格式:
Rnd[(Number)]功效:产生一个大于等于0,且小于
1随机数返回值数据类型:单精度型【例】Int(10*Rnd)
产生1个[0,9]随机整数
Int(10*Rnd+1
)
产生1个[1,10]随机整数第125页说明:☆Rnd函数产生随机数序列与参数Number有关。☆假如想取得真正随机数,那么应该在程序中将Randomize
作为第一条命令。(7)自然指数(对数)函数语法格式:
Exp(Expression)或者log(Expression)功效:计算eN次方或者计算以e为底数值表示式对数返回值数据类型:双精度型第126页(8)四舍五入函数语法格式:
Round(Expression1[,Expression2]
)功效:对Expression1值按指定小数位数进行四舍五入返回值数据类型:双精度型第127页说明:☆Expression1值是要进行四舍五入运算值。☆Expression2值表示在进行四舍五入运算时,小数点右边应该保留位数,假如缺省则函数返回整数值。☆Expression2值假如是小数,则先对其进行四舍五入到整数,再对Expression1进行四舍五入运算。☆函数能够接收小数位数最多为14位,假如Expression2值为负值,系统将作犯错误提醒。第128页【例】
Round(234.2678,2)
Round(234.2678)
Round(234.2678,8/3)
Round("234.2"+"678",2)
Round(234.2678,-1)
怎样产生1个[10,50]随机整数?
Int(Rnd*41)+10 Round(Rnd*40)+10234.27234234.268234.27犯错第129页2、字符串函数(1)字符串检索函数语法格式:
InStr([Start,]String1,String2[,Compare])功效:返回String2在String1中最早出现位置返回值数据类型:长整型说明:
String1为接收搜索字符表示式。
String2为被搜索字符表示式。
Start为数值表示式,设置搜索起始位置。假如缺省,则从第一个字符位置开始搜索。第130页
Compare指定字符串比较方法,其值能够是:
0
做二进制比较
1
不区分大小写文本比较
2
基于数据库中包含信息比较
如果指定了Compare参数,则一定要有Start参数。第131页Instr()函数返回值参数值返回值String1为零长度0String2为零长度StartString2找不到0在String1中找到String2找到位置Start大于String1长度0String1或String2为NullNull第132页【例】InStr("abcdABCD","bc") 2InStr(1,"abcdABCD","bc") 2InStr("","bc") 0InStr("abcdABCD","") 1InStr(3,"abcdABCD","") 10InStr(9,"abcdABCD","bc") 0第133页【例】InStr("abcdABCD","BC") 2InStr(1,"abcdABCD","BC",0) 6InStr(1,"abcdABCD","BC",1) 2InStr(3,"abcdABCD","bc",1) 6InStr(3,"abcdABCD","bc",0) 0InStr("abcdABCD",Null) InStr(Null,"bc") Null Null第134页(2)字符串长度检测函数语法格式:
Len(String|Varname)功效:返回字符串所含字符数返回值数据类型:长整型说明:a)String为任何有效字符常量表示式,函数返回即为该字符串中所含字符数。第135页b)Varname为任何有效变量名。
*假如变量是字符型(不是定长),则函数返回即为该变量所含字符数(未赋值时返回0);
*假如变量是除变体数据类型以外其它数据类型,则函数返回即为该数据类型所占空间;*假如变量是变体数据类型,则返回将其值作为字符串后所含字符数。第136页【例】?Len("AB"+"ECD") ?Len("南京")
5 2?
Len("1234.5678") ?Len(123)
9 出错x!=123.45 y#=123.45?Len(x)
?
Len(y)
4 8DimxAsString*10x="ABC"Debug.PrintLen(x)
10第137页【例】
x=123.4 z=True ?Len(x) ?Len(z) 5 4DimyAsDatey=#10/15/#Debug.PrintLen(y) 8?Len(Null) Nully=#10/15/#Debug.PrintLen(y)
10第138页(3)字符串截取函数
Left()函数语法格式:Left(String,Length)功效:从字符表示式String左侧第一个字符开始,截取由Length值所指定若干个字符
Right()函数语法格式:Right(String,Length)功效:从字符表示式String右侧第一个字符开始,截取由Length值所指定若干个字符
Mid()函数语法格式:Mid(String,Start[
,Length])功效:从字符表示式String返回一个子字符串此3个函数返回值数据类型均为字符型。第139页【例】
Left("ABCD中国",8-5)
ABC
Left("ABCD中国",0)
(空字符串)
Left("ABCD中国",8)
ABCD中国
Right("ABCD中国",4)
CD中国
Right("ABCD中国",7)
ABCD中国第140页【例】
Mid("ABCD中国",3,8)
CD中国
Mid("ABCD中国",12,2)
(空字符串)
Mid("ABCD中国",0,4)
犯错
Mid("ABCD中国",3,-1)
犯错第141页(4)生成空格字符函数语法格式:
Space(Number)功效:返回数值表示式所指定空格数返回值数据类型:字符型说明:
Number值必须是个大于等于0数;假如是负数,则犯错。【例】Space(1+2) Space(-2) □□□ 犯错
Space(0)
(空字符串)第142页(5)大小写转换函数
Ucase()函数语法格式:
Ucase(String)功效:将字符串中小写字母转换成大写字母
Lcase()函数语法格式:
Lcase(String)功效:将字符串中大写字母转换成小写字母此2个函数返回值数据类型均为字符型。【例】
Ucase("AbCd123") Lcase("AbCd123") ABCD123 abcd123第143页(6)删除空格函数
LTrim()函数语法格式:
LTrim(String)功效:删除字符串开始空格返回值数据类型:字符型
RTrim()函数语法格式:
RTrim(String)功效:删除字符串尾部空格返回值数据类型:字符型第144页
Trim()函数语法格式:
Trim(String)功效:删除字符串开始和尾部空格返回值数据类型:字符型☆String为任何有效字符表示式。☆此三个函数均不能删除字符串中间空格。第145页【例】
LTrim("□□□AB□□CD□□□□")
AB□□CD□□□□RTrim("□□□AB□□CD□□□□")
□□□AB□□CD
Trim("□□□AB□□CD□□□□)
AB□□CD"X□Y"+RTrim("□AB□□CD□□")+"L"
X□Y□AB□□CDL第146页3、日期/时间函数(1)系统日期和时间函数
Date()函数语法格式:Date()功效:返回当前系统日期
Time()函数语法格式:Time()功效:返回当前系统时间
Now()函数语法格式:Now()功效:返回当前系统日期和时间【例】Date+Time=Now
返回日期格式由操作系统设置日期格式决定。True第147页(2)截取日期分量函数
Year()函数语法格式:Year(Date)功效:返回日期表示式年份返回值数据类型:整型
Month()函数语法格式:Month(Date)功效:返回日期表示式月份返回值数据类型:整型
Day()函数语法格式:Day(Date)功效:返回日期表示式日期返回值数据类型:整型第148页【例】
Year
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论