




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章VBA编程入门第1页内容提要8-1VBA概念8-2VBA编程基础8-3VBA惯用语句8-4VBA程序流程控制8-5数组8-6VBA与宏8-7小结及练习第2页VBA(VisualBasicforApplication)是MicrosoftOffice系列软件内置编程语言,其语法结构与VisualBasic编程语言相互兼容,采取是面向对象编程机制和可视化编程环境。8-1VBA概述8-1-1VBA介绍第3页集合和对象VBA中应用程序是由许多对象组成,如表、窗体、查询等。对象是帮助结构应用程序元素,以特定方式组织这些对象,就形成了应用程序。数据库窗口把可供选择对象排列在一起,形成不一样类。8-1-2面向对象程序设计基本概念第4页对象属性、事件和方法属性
属性描述了对象本身性质。其格式为:
对象名.属性=属性值事件事件是指能够发生在一个对象上且能够被该对象所识别动作。如:单击某个命令按钮就产生该按钮“单击”事件当某个对象发生某一事件后,就会驱动系统去执行预先编好、与这一事件相对应一段程序。第5页方法方法是系统事先设计好,能够完成一定操作特殊过程,是从属于对象行为和动作。在需要使用时候能够直接调用。其调用格式为:
对象名.方法名第6页
Access中除数据库7个对象外,还提供一个主要对象:DoCmd对象除窗体、控件SetFocus(取得控制焦点)方法外,用得最多得是DoCmd对象一些方法。使用这些方法,能够在VBA中运行Access操作。第7页打开当前数据库中“雇员”窗体
DoCmd.OpenForm"Employees"
在数据库窗口中选择“雇员”窗体DoCmd.SelectObjectacForm,"
Employees
",True在数据库窗口中关闭“雇员”窗体
DoCmd.CloseacForm,“Employees”,acSaveYes删除数据库中“雇员”表
DoCmd.DeleteObject"Employees"
DoCmd对象惯用方法(参考教材P190页)第8页例8-1新建一个窗体并添加两个命令按钮,运行窗体后,单击第一个按钮,新式一个消息框;单击第二个按钮,退出当前窗体。(参考教材P191页)
经过此例,体会可视化编程、面向对象、事件过程、应用方法等基本概念。第9页进入VBE编程环境VBE窗口组成VBE窗口由工具栏、工程资源管理器窗口、属性窗口、代码窗口和马上窗口组成。在VBE环境中编写VBA代码8-1-3VBA编程环境第10页标准工具条视图MicrosoftAccess按钮:切换Access窗口插入按钮:插入模块或过程运行子过程/用户窗体按钮:运行模块中程序中止按钮:中止正在运行程序重新设置按钮:结束正在运行程序设置模式按钮:在设计模式和非设计模式之间切换工程资源管理器按钮:用于打开工程资源管理器属性窗口按钮:用于打开属性窗口对象浏览器按钮:用于打开对象浏览器MicrosoftAccsee插入模块运行子过程/用户窗体设计模式中止重新设计工程资源管理器对象浏览器属性窗口第11页工程窗口-选择对象属性窗口-选择对象属性代码窗口选择事件VBE编程环境第12页8-2-1常量、变量8-2VBA编程基础常量:在程序运行中其存放值不会改变。变量:在程序运行中其值能够改变。VBA使用常量、变量来存放值。用来保留在程序运行期间数据。第13页常量
在程序运行过程中,其值不会被改变量称为常量。在VBA中有三类常量:直接常量
如:10,20%,123.0,“AB”,“VBA程序设计”等
符号常量系统常量
指VBA系统预先定义好,用户能够直接引用量。如:acForm,acQuery,vbOk,vbRed
第14页符号常量
在程序中,某个常量屡次被使用,则能够使用一个符号来代替该常量,这么不但在书写上方便,而且有效地改进了程序可读性和可维护性。VBA中使用关键字Const
申明符号常量。其格式以下:
Const常量名[类型符号]=常数表示式如:
ConstPI#=3.1415926第15页变量是内存中暂时单元,存放在程序执行过程中产生中间结果和最终输出结果。
在程序中使用变量,就要给变量定义名称及类型,即对变量进行申明。变量第16页
变量命名规则变量名必须以字母或汉字开头,后可跟字母、汉字、数字或下划线组成(不能含有小数点和空格),长度不超出255个字符字符串;不能使用VBA中关键字;VBA中不区分变量名大小写;变量名最终一个字符能够是%、&、!、#、$等表示数据类型申明符。说明:常量名命名规则与变量名命名规则相同第17页8-2-2数据类型与变量申明在VBA中,数据类型用来决定变量能够保留何种数据。VBA支持各种数据类型,为用户编程提供了方便。参考教材P196页表8-1VBA数据类型第18页
VBA数据类型数据类型类型申明符存放空间取值范围整型(Integer)%2-32768~32767长整型(Long)&4-2147483648~2147483647单精度浮点型(Single)!4负数:-3.402823E38~-1.401298E-45正数:1.401298E-45~3.402823E38双精度浮点型(Double)#8负数:-1.79769313486232E308~-4.94065645841247E-324正数:4.94065645841247E-324~1.79769313486232E308货币型(Currency)@8-922337203685477.5808~922337203685477.5807日期型(Date)811月1日~9999年12月31日字符型(String)$0字符~65400个字符字节型(Byte)10~255逻辑型(Boolean)2True或False对象型(Object)4任何引用对象变体型(Variant)第19页变量申明用Dim|Static语句显式申明局部变量格式:Dim变量名[AS类型]或Dim变量名类型符语句中“As类型”子句是可选。假如使用该子句,就能够定义变量数据类型。未使用,默认变量类型为变体型(Variant)。比如:DimiAsinteger,s表示申明了一个名为i整型变量和一个名为s变体型变量。第20页关键字Dim或Static区分:Dim申明:随过程调用而分配存贮单元,每次调用都对变量初始化;过程体结束,变量内容自动消失,存放单元释放。Static申明:Static申明变量,也称为静态变量。静态变量在程序运行过程中一直保留其值,即每次调用过程,变量保持原来值。
第21页隐式申明变量
未进行上述申明而直接使用变量,称变量隐式申明。采取隐式申明变量都是变体型(Variant)。
注意:
VBA中允许不事先申明而直接使用变量,能够经过语句
OptionExplicit,来要求所使用变量必须事先申明,不然VBA会发出警告信息。第22页下面是一个简单程序,其使用变量a,b,Sum都没有事先定义。PrivateSubForm_Click()
Sum=0
a=10
b=20Sum=a+bPrint"Sum=";SumEndSub
良好编程习惯应该是“先申明变量,后使用变量”,这么做能够提升程序效率,同时也使程序易于调试。VBA中能够强制显式申明,能够在窗体模块、标准模块和类模块通用申明段中加入语句:OptionExplicit第23页申明而未赋值变量值为:数值型变量初始化为0;字符型变量为零长度字符串;变体型变量初始化为Empty。
变量初始化第24页8-2-3运算符和表示式(教材P199页)运算符算术运算符第25页比如:"123"+"456"结果"123456"
"123"&"456"结果"123456"
使用上&与+区分:比如:"abcdef"&12345结果为"abcdef12345"
"123"&456结果为"123456"
"abcdef"+12345结果为犯错"123"+456结果为579
连接运算符:
&、+(字符串连接)第26页
将两个操作数进行大小比较,结果为逻辑值。
注意:字符串比较,则按字符ASCII码值从左到右一一比较,直到出现不一样字符为止。关系运算符第27页将操作数进行逻辑运算,结果是逻辑值逻辑运算符第28页组成
由变量、常量、函数等运算对象加上运算符、圆括号组成式子。书写规则
(1)运算符不能相邻。例a+-b是错误。(2)乘号不能省略。例x乘以y应写成:x*y。(3)括号必须成对出现,均使用圆括号。(4)表示式从左到右在同一基准上书写,无高低。运算优先级
算术运算符>连接运算符>关系运算符>逻辑运算表示式第29页例1:用人单位招聘秘书:年纪小于40岁女性,学历专科或本科,年纪<40,性别=“女”,(学历=“专科”,学历=“本科”)
AndAndOr例2:算术表示式:正确VBA表示式:3〈=xAndx<=7
错误VBA表示式:3<=x<=7或3<=xOrx<=7
考虑:若分别写成:年纪<40And性别="女"And(学历="专科"And学历="本科")年纪<40Or性别="女"Or(学历="专科"Or学历="本科")第30页
函数实际上是系统事先定义好内部程序,用来完成特定功效。VBA提供了大量内部函数,供用户在编程时使用。
函数调用形式为:函数名(参数表)惯用内部函数
参考教材P201页表8-5惯用内部函数,在马上窗口练习,体会函数功效。8-2-4惯用函数第31页InputBox函数InputBox(提醒[,标题][,缺省])
其中:提醒:提醒信息;标题:对话框标题;缺省:输入区缺省值。
注意:函数返回值为字符型数据。输入、输出函数第32页使用MsgBox,能够在对话框中显示文本信息。格式为:MsgBox(提醒信息[,按钮数目和类型][,标题])MsgBox函数或方法(用于显示输出信息)MsgBox函数:变量[%]=MsgBox(提醒[,按钮][,标题])MsgBox方法:MsgBox提醒[,按钮][,标题]第33页8-3VBA惯用语句
VBA代码不区分字母大小写
系统保留字自动转换每个单词首字母大写;
语句书写自由
一行可书写几句语句,之间用冒号(:)分隔;一句语句可分若干行书写,用续行符将语句分开。8-3-1VBA语句书写规则第34页赋值语句:给变量、常量或对象属性指定一个值或表示式。8-3-2VBA惯用语句
格式:[LET]变量名=表示式
作用:将表示式值赋值给变量名。普通用于给变量赋值或对控件设定属性值。比如:s=10Text1.Text="欢迎使用VBA"注意:即使赋值号与关系运算符等于号都用“=”表示,VBA会依据所处位置自动判断是何种意义符号第35页申明语句:命名和定义常量、变量、数组以及过程。注释语句在程序中适当位置加上注释语句有利于程序维护和阅读。
格式:Rem注释内容 或用单引号’注释内容第36页结构化程序设计由次序、分支、循环这3种基本结构所组成。语句组2语句组1TF语句组2条件语句组1
8-4VBA程序流程控制FT条件语句组TF条件语句组第37页单行If语句格式:If表示式Then语句1[Else语句2]功效:If测试指定条件,假如条件表示式为真(True),则执行Then后面语句1,不然执行语句2(若Else子句未省略)。分支结构TF语句2条件语句1TF条件语句1第38页PrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox("请输入x值")
Ifx>=0Theny=2*x+1MsgBox"y:"&yEndSubPrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox(“请输入x值”)
Ifx>=0Theny=2*x+1Elsey=1MsgBox"y:"&yEndSub依据输入x值,观察y输出结果第39页多行If语句格式:If表示式Then语句组1[Else语句组2]EndIf第40页多行If语句执行过程是:假如“表示式”值为真,则执行语句组1;不然执行语句组2。当执行完语句组1或语句组2后,程序流程跳转到语句EndIf后面。语句组能够由一条或多条语句组成,语句组不能与Then书写在同一行,不然VBA认为是一个单行If语句,会造成Else没有匹配If。语句“EndIf”是多行If语句结束标志。在多行If语句中,即使省略Else子句,也要写该结束标志。省略Else子句时多行If语句形式为:If表示式Then语句组 EndIf第41页
例:计算分段函数单行If语句实现:
Ifx=0Theny=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqr(x*x+1)
多行If语句实现:Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIf第42页If语句嵌套If语句嵌套是指If或Else后面语句块中又包含If语句。
If<表示式1>Then
If<表示式11>Then…EndIf
…
EndIf第43页
例:已知x,y,z三个数,使得x>y>z
用一个IF语句和一个嵌套IF语句实现Ifx<yThent=x:x=y:y=t
Ify<zThent=y:y=z:z=t
Ifx<yThent=x:x=y:y=tEndIf
EndIfIf语句嵌套注意事项:书写锯齿型;If与EndIf配对第44页If…Then…ElseIf语句(多分支结构)
If<表示式1>Then <语句块1>ElseIf<表示式2>Then <语句块2> … [Else语句块n+1]
EndIf第45页不论有几个分支,依次判断,当某条件满足,执行对应语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,不然什么也不执行。ElseIf不能写成ElseIf。说明:第46页例:已知百分制成绩mark,显示对应五级制成绩以下三种方法哪些正确,哪些错误?第47页<表示式列表>:与<变量或表示式>同类型下面四种形式之一:
表示式
例:"A"
一组枚举表示式(用逗号分隔)
2,4,6,8
表示式1To表示式2
60To100
Is关系运算符表示式
Is<60SelectCase语句(情况语句)语句格式:
SelectCase变量或表示式 Case表示式列表1 语句块1 Case表示式列表2 语句块2 …
[CaseElse 语句块n+1]
EndSelect数值型或字符串表示式第48页程序流程图语句块n+1语句块1语句块2语句块n条件2TF…...条件nTF条件1TF第49页例:变量strC中存放了一个字符,判断该字符类型。用多分支结构实现:
IfUcase(strC)>="A"AndUcase(strC)<="Z"Then PrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"Then PrintstrC+"是数字字符"Else PrintstrC+"其它字符"EndIf用SelectCase语句实现:
SelectCasestrC Case"a"To"z","A"To"Z" PrintstrC+"是字母字符" Case"0"To"9" PrintstrC+"是数字字符" CaseElse PrintstrC+"其它字符"EndSelect第50页比如:在输入成绩文本框中输入一个分数,单击“判断”命令按钮后,在成绩等级文本框中显示对应成绩等级。输入成绩在90~100分为A,80~89分为B,70~79分为C,60~69分为D,0~59分为E,不然显示犯错信息。
编程点拨:依据题意,当输入成绩不在[0,100]内时,应显示犯错信息,在该范围内时,应进行分等级。判断是否为正当成绩可用If语句,而分等级最好使用SelectCase语句。
第51页条件函数
IIf函数形式为:
IIf(表示式,当表示式为True时值,当表示式为False时值)
比如:求x,y中大数,放入max变量中。 max=IIf(x>y,x,y)
第52页循环结构(参考教材P211页)For…Next循环Do…Loop循环第53页For…Next循环结构:将一段程序重复执行指定次数,其中使用一个计数变量,统计执行次数。格式:
For循环变量=初值to终值[Step步长]语句块 [ExitFor] 语句块Next[循环变量]For…Next循环语句P211循环体第54页
循环变量
<=终值
语句块
ExitFor
语句块
循环变量加步长
T
F
循环变量得初值
第55页功效:执行For语句时,“循环变量”设为“初值”;执行到Next语句时,步长加(减)到循环变量上;再执行For语句时,若“循环变量”超出“终值”则循环结束。步长:未指定值时默认为1。若“步长”是正数或0,则“初值”应大于等于“终值”,不然,“初值”应小于等于“终值”。第56页例:计算累加程序S=1+2+3+4….+x,并输出结果。方法:接收一个累加终值,确定一个循环变量,循环变量有2个作用(加数和循环变量),确定一个存放累加和变量。使用循环计算,最终输出显示结果。
DimsAsinteger,xAsintegerx=InputBox("请输入累加终值")Forx=lToxs=s+xNext思索:计算=1+3+5+7…X或2+4+6+8…X怎样编写?第57页例:计算累乘程序S=1*2*3*4…X方法:接收一个累乘终值,确定一个循环变量,循环变量有2个作用(乘数和循环变量),确定一个存放累乘积变量。使用循环计算,最终输出显示结果。
DimSAsinteger,iAsintegerx=InputBox("请输入累加终值")S=1Fori=lToxS=S*iNext注意:累乘乘数和乘积变量初值为1。第58页注意:出了循环,循环控制变量值问题。例程序段:
Fori=2To13Step3循环执行次数
debug.Printi 输出i值分别为:25811Nextidebug.Printi出了循环输出为:i=14第59页例:改变循环控制变量对循环影响PrivateSubCommand1_Click()j=0Fori=1To20Step2
i=i+3j=j+1Print"第";j;"次循环i=";iNextiPrint"退出循环后i=";iEndSub正常情况:i=1,3,5,7,9,11,13,15,17,19现在:i=4,9,14,19第60页Do…Loop循环语句(用于控制循环次数未知)形式1:
Do{While|Until}<条件>语句块[ExitDo语句块]Loop
形式2:
Do
语句块 [ExitDo 语句块] Loop{While|Until}<条件>第61页Do…Loop语句(循环结构)DoWhile…Loop语句DoUntil…Loop语句Do…LoopWhile语句Do…LoopUntil语句第62页
DoWhile…Loop语句
i=1DoWhilei<=10s=s+ii=i+1Loop
当i<=10成立时,执行循环体循环变量i必须有初值预防产生死循环有可能一次也不执行循环体修改循环控制变量,改变加数值第63页Do…LoopWhile
i=1Dos=s+ii=i+1LoopWhilei<=10当i<=10成立时,执行循环体循环变量i必须有初值预防产生死循环最少执行一次循环体修改循环控制变量,改变加数值第64页DoUntil…Loop
i=1DoUntili>10s=s+ii=i+1Loop
当i>10成立时,结束执行循环体循环变量i必须有初值预防产生死循环有可能一次也不执行循环体修改循环控制变量,改变加数值第65页Do…LoopUntil
i=1Dos=s+ii=i+1LoopUntili>10当i>10成立时,结束执行循环体循环变量i必须有初值预防产生死循环最少执行一次循环体修改循环控制变量,改变加数值第66页补充:While…Wend语句格式以下: While<条件> <循环块> Wend说明:该语句功效与DoWhile<条件>….Loop实现循环完全相同。第67页三种循环语句:即For、Do—Loop,共同特点是重复执行一个语句系列(循环体),不一样点是控制重复次数时机和方法不一样。参考教材P206-P214页实例,掌握程序控制结构。第68页
数组:数组不是一个数据类型,而是一组相同类型变量集合。能够像使用普通变量一样使用数组中每一个元素。使用数组好处是用一个数组名代表逻辑上相关一批数据,用下标表示该数组中各个元素,能够提升处理数据效率,缩短和简化程序。8-5数组第69页
数组不是一个数据类型,而是一组相同类型变量集合,数组必须先申明后使用。
两类数组:静态(定长)数组、动态(可变长)数组
1.一维数组
定义一维数组形式:
Dim数组名([下界To]上界)[As类型]
申明了数组名、维数、大小、类型8-5-1数组定义第70页说明:数组名命名规则与变量命名相同。数组元素个数:上界-下界+1。缺省<下界>为0,若希望下标从1开始,可在模块通用部分使用OptionBase语句将设为1。其使用格式是:
OptionBase0|1
'后面参数只能取0或1比如:OptionBase1'将数组申明中缺省<下界>下标设为1下界>和<上界>不能使用变量,必须是常量,常量能够是直接常量、符号常量,普通是整型常量。第71页假如省略As子句,则数组类型为变体类型。
数组中各元素在内存占一片连续存放空间,一维数组在内存中存放次序是按下标大小次序。例:Dimmark(1to100)AsInteger例:Dima(-1to3)AsInteger申明一维数组a,包含了5个整型元素a(-1)、a(0)、a(1)、a(2)、a(3);第72页在定义静态数组时,每一维元素个数必须是常数,不能是变量或表示式。
如:错误申明,下标是变量Dimx(n)或:n=Inputbox(“输入n”)Dimx(n)AsSingle注意:第73页在数组申明中下标说明了数组整体,即每维大小;而在程序其它地方出现下标表示数组中一个元素。二者写法形式相同,但意义不一样。比如:Dimx(10)AsInteger
x(10)=100
表示申明了数组x,有11个数组元素对x(10)这个数组元素赋值第74页定义二维数组形式:Dim数组名([下界1To]上界1,下界2To]上界2)As类型比如:Dima(2,3)AsSingle
二维数组在内存存放次序是“先行后列”。数组a各元素在内存中存放次序是: a(0,0)→a(0,1)→a(0,2)→a(0,3) a(1,0)→a(1,1)→a(1,2)→a(1,3) a(2,0)→a(2,1)→a(2,2)→a(2,3)
2.二维数组第75页例:DimlArray(0To3,0To4)AsLong共有4×5个元素等价于:DimlArray(3,4)AsLong
第76页
动态数组指在申明数组时未给出数组大小(省略括号中下标),当要使用它时,随时用ReDim语句重新指出数组大小。形式以下:
ReDim数组名(下标[,下标2…])[As类型]
例:Private
SubS1()
Dimx()AsSingle …
n=Inputbox(“输入n”)
ReDimx(n)…
EndSub3.动态数组第77页说明:
Dim、Static、Public申明语句是说明性语句,可出现在过程内或通用申明段;ReDim语句是执行语句,只能出现在过程内;在过程中可屡次使用ReDim来改变数组元素个数ReDim中下标能够是常量,也能够是有了确定值变量。如:n=InputBox(“输入n值”) ReDimArr(n)
静态数组在程序编译时分配存放单元,动态数组在运行时分配存放单元。第78页一维数组元素引用使用形式:数组名(下标)其中:下标能够是常量、整型变量或表示式。比如:设有下面数组A(10)、B(10)AsInteger
则下面语句都是正确。A(1)=B(2)+B(1)+5'取数组元素运算A(i)=B(i)'下标使用变量A(i+2)=B(i+1) '下标使用表示式注意:引用数组时不能下标越界8-5-2数组基本操作1.数组元素引用第79页引用二维数组形式:数组名([下标1,下标2)
下标1指定元素在二维表中所在行,下标2指定元素在二维表中所在列。比如:a(1,2)=10a(i+2,j)=a(2,3)*2
在程序中经常经过二重循环来操作使用二维数组元素。
第80页数组引用实例:第81页经过循环给数组元素初值
Fori=1To10'A数组每个元素值为1 A(i)=1Next
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论