VBA程序设计目录上一页下一页退出VBA程序设计1VBA程序设计基础2VBA的基本语句3模块与过程4DoCmd对象5VBA的数据库编程6VBA的出错处理及调试目录上一页下一页退出1VBA程序设计基础1.1面向对象的程序设计1.2VBE编程环境1.3VBA编程基础返回目录上一页下一页退出1.1面向对象的程序设计1.对象和类•对象是构成软件系统的一个基本单位,它把描述该对象静态特性的数据(称为属性)和对这些数据施加的所有操作(称为方法)封装在一起构成一个统一体。•类是具有共同属性、共同方法的对象的集合,是对象的抽象。目录上一页下一页退出1.1面向对象的程序设计1.对象和类多个对象构成集合。在Access数据库中常用的有窗体集合Forms、报表集合Reports。通过标识运算符“!”来引用某一窗体和报表对象。特殊对象:Me代表当前窗体或当前报表要访问“学生基本情况”窗体,使用以下形式:Forms!学生基本情况Me要访问“教师基本信息报表”,可用以下形式:Reports!教师基本信息报表Me目录上一页下一页退出1.1面向对象的程序设计2.属性和方法•属性描述了对象的静态特征。•方法描述了对象的动态行为。•使用标识运算符“.”来引用窗体、报表或控件的属性和方法,其引用方式为:对象.属性或对象.方法例:Forms!学生基本情况.RecordSource=“学生”Me.RecordSource=“学生”RecordSource=“学生”Forms!学生基本情况!姓名.SetFocusMe.SetFocusSetFocus目录上一页下一页退出1.1面向对象的程序设计3.事件和事件过程•事件是一种由系统预先定义而由用户或系统发出的动作。•响应事件:①宏对象;②VBA代码编写事件过程。•事件过程的语法为:Sub对象名_事件()处理事件的代码EndSub其中常用的事件有:Click、DblClick、GotFoucs、Change、BeforeUpdate、Timer、Load目录上一页下一页退出1.1面向对象的程序设计4.创建事件过程1)打开要创建事件过程的窗体、报表、控件的属性窗口;2)单击属性窗口的“事件”选项卡,选中某个事件并设置属性为“(事件过程)”选项,再单击属性栏右侧的生成器按钮“…”。3)Access打开VBE编程环境,并自动添加事件过程的框架,可以在过程框架中加入VBA代码,完成事件过程的创建。返回目录上一页下一页退出1.2VBE编程环境1.进入VBE编程环境•在窗体或报表的设计视图下,执行“视图”→“代码”菜单命令或直接单击“代码”工具按钮。•在窗体或报表的设计视图下,打开某个控件的属性窗口,选中某个事件并设置其属性为“(事件过程)”选项,再单击属性栏右侧的生成器按钮“…”。•执行“工具”→“宏”→“VisualBasic编辑器”菜单命令。目录上一页下一页退出1.2VBE编程环境2.VBE的窗口工具栏工程窗口属性窗口代码窗口目录上一页下一页退出1.2VBE编程环境1.标准工具栏目录上一页下一页退出1.2VBE编程环境2.工程窗口又称工程项目管理器。在其中的列表框当中列出了应用程序的所有模块文件。①查看代码:打开代码窗口②查看对象:打开对象窗口③切换文件夹:隐藏或显示对象分类文件夹双击工程窗口上的一个模块或类,相应的代码窗口就会显示出来。3.属性窗口列出了所选对象的各个属性,分“按字母序”和“按分类序”两种查看形式。目录上一页下一页退出1.2VBE编程环境4.代码窗口输入和编辑VBA代码。目录上一页下一页退出1.2VBE编程环境3.获得帮助•对象浏览器:执行“视图”→“对象浏览器”菜单命令显示对象浏览器窗口。•事件过程模板:在代码窗口的“对象”组合框中选择该对象,然后在“过程”组合框中选择事件,系统会自动生成相应的事件过程模板。•自动显示提示信息•帮助系统:执行“帮助”→“MicrosoftVisualBasic帮助”或直接按下F1键。返回目录上一页下一页退出1.3VBA编程基础1.数据类型•整型(Integer、%),长整型(Long、&),单精度型(Single、!),双精度型(Double、#),货币型(Currency),字符型(String、$),布尔型(Boolean),日期型(Date),变体型(Variant)。•布尔型与数字型转换:①布尔型→数字(False→0,True→-1);②数字型→布尔型时(0→False,其它→True)。•VBA默认的变量类型是Variant。目录上一页下一页退出1.3VBA编程基础2.常量•系统常量(True、False、Yes、No、On、Off、Null等)•内部符号常量•用户定义的符号常量,定义语法为:Const符号常量名称=表达式或值例:ConstPi=3.1415926535897932384626433目录上一页下一页退出1.3VBA编程基础3.变量•变量是指程序运行时值会发生变化的数据。在VBA中使用变量来临时存储数据。•变量有名字和数据类型。•变量的数据类型决定了如何将这些值存储到计算机的内存中。•VBA中的变量名大小写不“敏感”。2)变量的声明1.隐含型变量不直接定义,而借助将一个值指定给变量名的方式来建立变量,如:NewVar=528NewVar%=23例:①Var1=16②Var2%=16目录上一页下一页退出1.3VBA编程基础2.显式变量变量先定义后。其定义方法为:(1)Dim变量名As数据类型(2)Public/Private/Static变量名As数据类型如果没有“数据类型”部分,则将变量默认指定为Variant类型。例:③DimVar1④DimVar2AsInteger⑤PublicVar3AsString⑥PrivateVar4AsDate⑦StaticVar5AsString目录上一页下一页退出1.3VBA编程基础3)定长字符串变量Dim|Public|Private|Static变量名AsString*n例:PublicVar6AsString*84)变量的作用域和生命周期1.局部范围在子过程或函数过程中的隐含型变量或使用Dim定义的显式变量的作用范围都是局部的。2.模块范围在模块的变量定义区域通过Dim/Private/StaticAs定义的变量是其作用范围是模块。3.全局范围在标准模块的变量定义区域,用Public…As关键字说明的变量就属于全局的范围,在所有类模块和标准模块的所有子过程与函数过程中都可见。目录上一页下一页退出1.3VBA编程基础•变量的持续时间是从变量定义语句所在的过程第一次运行到程序代码执行完毕并将控制权交回调用它的过程为止的时间。•每次调用子过程或函数过程时,以Dim…As语句说明的局部变量,如果是数值数据类型将会被自动设置为0,若为字符串变量则设置为空字符串(“”)。•以Dim…As语句声明的局部变量,有着与子过程或函数过程等长的持续时间。•静态(Static)变量的持续时间是整个模块执行的时间,但它的有效作用范围是由其定义位置决定的。目录上一页下一页退出1.3VBA编程基础4.数组1)声明数组Dim|Public|Private|Static数组名([下标下限To]下标上限)[As数据类型]默认下标下限是0,可用OptionBase1改为1。例:DimGrade(10)AsIntegerDimStudent(1To10)AsInteger2)二维数组和多维数组例:StaticTwo(9,9)AsIntegerStaticTwo(1To10,1To8)AsIntegerDimThree(5,5,5)AsInteger目录上一页下一页退出1.3VBA编程基础3)动态数组定义和使用方法是:①用Dim显式定义数组但不指明数组元素数目②用ReDim关键字来决定数组包含的元素数目来定义数组,以建立动态数组。例:DimNewArray()AsLongReDimNewAmp(9,9,9)目录上一页下一页退出1.3VBA编程基础5.自定义数据类型Type[数据类型名]域名As数据类型域名As数据类型…EndType例:TypeStudentsCodeAsString*5NameAsString*8SexAsBooleanAgeAsIntegerEndType返回目录上一页下一页退出2VBA的基本语句2.1注释与赋值语句2.2选择结构语句2.3循环结构语句2.4语句标号和GoTo语句返回目录上一页下一页退出2.1注释与赋值语句1.注释语句•Rem注释具体内容•'注释具体内容例:Rem以下设置窗体标题、数据源并刷新窗体Me.Caption=学生管理'窗体标题“学生管理”Me.RecordSource=学生'数据来源为“学生”Me.Requry'刷新窗体中的控件目录上一页下一页退出2.1注释与赋值语句2.复合与继行•用冒号“:”将两个分开,这称为复合。•使用续行符(一个空格后面跟一个下划线)将较长的语句分为两行或多行例:Me.Caption=“学生管理”Me.RecordSource=学生:Me.Requry目录上一页下一页退出2.1注释与赋值语句3.赋值语句•对普通变量赋值:[Let]变量名=表达式例:a=100*20或leta=100*20•为对象变量赋值:Set变量=表达式例:DimStrNameAsControlSetStrName=Forms!学生基本情况!姓名StrName.ForColore=255StrName.FontName=“宋体”目录上一页下一页退出2.1注释与赋值语句4.输入/输出语句•输入语句InputBoxInputBox提示信息[,标题][,默认值][,横坐标][,纵坐标]例:strName=InputBox(请输入你的名字:,,李四)strSex=InputBox(请输入你的性别:,InputBox示例2,男)目录上一页下一页退出2.1注释与赋值语句4.输入/输出语句•输出语句MsgBoxMsgBox消息[,按钮模式][,标题]例:MsgBox欢迎使用&Chr(13)&VBA进行程序设计,vbOKOnly,欢迎返回目录上一页下一页退出2.2选择结构语句1.条件语句If…Then…EndIf1)单路分支条件语句格式1:If条件Then语句格式2:If条件Then语句序列EndIf条件语句序列真假目录上一页下一页退出2.2选择结构语句IfX80ThenI=5:J=6EndIfIfX90ThenI=7:J=8EndIfMsgBoxI&JEndSubPrivateSubCommand1_Click()X=88IfX60ThenI=1:J=2EndIfIfX70ThenI=3:J=4EndIf目录上一页下一页退出2.2选择结构语句2)双路分支条件语句格式1:If条件Then语句1Else语句2格式2:If条件Then语句序列1Else语句序列2EndIf条件语句序列1真假语句序列2目录上一页下一页退出2.2选择结构语句例:PublicSubsgnx()DimxAsSingleDimyAsIntegerx=InputBox(请输入x的值,输入,0)Ifx0Theny=1ElseIfx=0Theny=0Elsey=-1EndIfMsgBoxy的值是:&y,vbOKOnlyEndSub010001-xxxy 目录上一页下一页退出2.2选择结构语句3)多路分支条件语句If条件1Then语句序列1ElseIf条件2Then语句序列2……[Else语句序列N+1]EndIf目录上一页下一页退出2.2选择结构语句例:某百货公司举行促销活动,根据购买商品的总金额实行不同的折扣,其标准如表8-3所示:要求编写一个过程Cac,输入总金额,自动输出应付金额。总金额折扣率小于505%50到10010%100到50012%500到200013%2000到500014%5000以上15%目录上一页下一页退