1、模块与VBA程序设计,模块和过程的创建,模块是Access数据库7个对象之一,其实质就是没有界面的VBA程序。模块具有很强的通用性,窗体、报表等对象都可以调用模块内部的过程。模块基本上是由声明、语句和过程组成的集合,它们作为一个已命名的单元存储在一起,对VBA代码进行组织。 Access 有两种类型的模块:标准模块和类模块。,模块和过程的创建,类模块 包括窗体模块(模块中包含在指定的窗体或其控件上事件发生时触发的事件过程的代码。)和报表模块(模块中包含由在指定报表或其控件上发生的事件触发的事件过程的代码。) ,它们各自与某一特定窗体或报表相关联。 类模块可以调用标准模块中定义好的过程 作用范围
2、限于所属窗体或报表内部,生命期也随窗体或报表的打开而开始、关闭而结束,模块和过程的创建,标准模块 标准模块包含的是通用过程和常用过程,这些通用过程不与任何对象相关联,常用过程可以在数据库中的任何位置运行。类模块可以调用标准模块中定义好的过程 标准模块中的公共变量和公共过程具有全局特性,作用范围在整个应用程序,生命期伴着应用程序运行而开始、关闭而结束,模块和过程的创建,模块的基本组成单元过程 Sub子过程 可执行一系列操作,无返回值 可在该子过程之外用CALL显示调用 调用Call mysub(参数1,参数2,) Function函数 执行一系列操作,返回执行结果 返回值直接利用函数名调用获得
3、调用x=myFuntion(参数),Sub mysub(参数1,参数2,)变量声明部分操作语句部分 End Sub,Function myFunction(参数)变量声明部分操作语句部分 End Function,模块和过程的创建,模块的创建 创建一个名为“模块入门”的新模块,模块和过程的创建,过程的创建 在“模块入门”模块中创建一个Hello过程,VBA编程环境:VBE界面,工程窗口,属性窗口,代码窗口,立即窗口,对象选定器,过程选定器,VBA编程环境:VBE界面,ACCESS视图,运行子过程/用户窗体,中断,重新设定,工程管理器,插入模块,属性窗口,对象浏览器,显示出对象库以及工程里过程中
4、的可用类、属性、方法、事件及常数变量。可以用它来搜索及使用既有的对象,或是来源于其他应用程序的对象。,VBA程序设计,一门程序设计语言应该怎么学? 掌握语言的基本用途 掌握语言的基本构成 掌握语言的基本书写规范 掌握语言的数据类型、运算符、常用函数、基本语句结构、调用关系。 利用上述元素编写程序代码,逐步深化,面向对象编程基本概念,一、对象与类 对象:对象是基本的运行时的实体,如窗体、报表、各种控件等,包括作用于对象的操作(方法)和对象的响应(事件)。将数据和处理这些数据的过程封装在一起。 类:一个抽象的整体概念 ,对象是类的实例化。 类与对象是面向对象程序设计语言的基础。 例:“学生”类,“
5、张三” 对象,面向对象编程基本概念,二、属 性(Property)对象中的数据,所有对象都有自己的属性。用来描述和反映对象特征的参数。如:控件名称(Name)、标题(Caption)、颜色(Color)、字体(FontName)等属性决定了对象展现给用户的界面具有什么样的外观及功能。 对象属性设置的方法: 在设计模式下,通过属性窗口直接设置对象的属性。 在程序的代码中通过赋值实现,其格式为:对象.属性=属性值 例: Label10.Caption=“显示”,面向对象编程基本概念,在VBA中引用ACCESS对象: 基本语法:Forms(或Reports)!窗体(或报表)名称!控件名称.属性名 注
6、意要点 如果在通用模块或在一类模块中引用另一类模块的控件时,应该使用上述完整语法。 如果在类模块中引用自己窗体上的控件,仅采用下面语法:控件名称.属性名,例如:在窗体Form1中引用Form2上的Label1控件Forms!Form2!Label1.Caption=“教师信息表” 在引用Form2上引用自己的Label1控件Label1.Caption=“教师信息表,基本控件常用属性,面向对象编程基本概念,三、事件(Event)及事件过程(Event Procedure) 事件:可被对象识别的动作。如:窗体打开OnOpen,按钮的单击OnClick,双击OnDbClick等 事件过程:是指附在
7、该对象上的程序代码,是事件触发后处理的程序。事件过程的形式如下:Sub 对象名_事件过程名(参数列表) (事件过程代码)End Sub,例如:Sub cmdOk_Click()cmdOk.FontSize=20 设置命令按钮的字体大小为20 End Sub,面向对象编程基本概念,四、方 法(Method) 方法:在对象上可操作的过程,是VB系统提供的一种特殊的过程和函数 方法是面向对象的,所以方法调用一般要指明对象。 对象方法调用形式: 对象.方法 参数列表 ,例如:Debug.print “欢迎您使用ACCESS “ 在立即窗口中打印出文字,VBA数据类型、常量、变量,本节内容及要求 1.熟
8、悉VB程序中代码和语句书写规则 2.掌握VB的数据类型 3.掌握VB的运算符和表达式的使用 4.掌握常用内部函数的使用,VBA数据类型、常量、变量,编码规则 1.VBA代码中不区分字母的大小写。 2.一条语句写完后不需加任何结束符。 3.同行上可以书写多条语句,语句间要用冒号“:”分隔。 4.若一个语句行不能写下全部语句时,可以换行。换行时需在本行后加入续行符,1个空格加下划线“_”。 5.一行最多允许255个字符。 6.注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。 7.在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。 8.函数和方法后应加上括号()。
9、,VBA数据类型、常量、变量,编码规则举例 LABEL10与label10相同 x=y+z:y=z+x:z=y+x 在同一行书写了三个语句 MyVar = “这是一个 “ _& “例子说明如何 “ _& “续行代码“ 空白加下划线 ( _) 可接续两行以上的代码。 This is a comment. () 引导注释文本Rem This is a comment Rem引导注释文本 If Number = 1 Then GoTo Line1 Else GoTo Line2 End ifLine1:标号1MyString = “数值等于1“ Line2:标号2MyString = “数值等于2“
10、,VBA数据类型、常量、变量,数据类型标准数据类型,VBA数据类型、常量、变量,在Access中,有4种不同的编辑环境需要用户指定数据类型表设计视图、查询参数、VBA代码、SQL查询视图。其数据类型与VBA数据类型对比,如右图所示。,数据类型的对比,VBA数据类型、常量、变量,数据类型之间的转换 在进行VBA编程过程中,用户可以将一种数据类型的数据转换成另一种特定类型的数据。,VBA数据类型、常量、变量,数据类型自定义类型在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。,基本语法: Private | Public Type 类型名元素名 As 数据类型 元素名 As 数据
11、类型 End Type,例:定义学生类型数据 Public Type StudentsName As String*8Age As Integer End Type,声明变量:Dim Student As Students 引用数据:Student.Name=”张三”Student.Age=15,VBA数据类型、常量、变量,标准数据类型要点 Boolean 数据类型:值只能是 True 或是 False。当转换其他的数值类型为 Boolean 值时,0 会转成 False,而其他的值则变成 True。当转换 Boolean 值为其他的数据类型时,False 成为 0,而 True 成为 -1。
12、 Date 数据类型:日期须以数字符号 (#) 扩起来,例如,#2008-3-23# Object 数据类型:利用 Set 语句,声明为 Object 的变量可以赋值为任何对象的引用。 Variant 数据类型:所有没被显式声明(用如Dim、Private、Public或Static等语句)为其他类型变量的数据类型。,VBA数据类型、常量、变量,Variant 数据类型 Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据,以及Empty、Error、Nothing 及 Null等特殊值。可以用 VarType 函数(变量类型)或 Type
13、Name(类型名)函数来检查 Variant 中的数据实际类型。,VBA数据类型、常量、变量,标识符程序中常量、变量、过程等对象的名字,VBA标识符规定: 第一个字符必须是字母 包含的字符数不超过255个 不得与VBA的关键字同名,如不能使用Sub、For等 不能使用下列字符:! & $ # (空格) 从增强程序可读性角度出发,标识符应使人望文生义,了解其代表的内涵。,VBA数据类型、常量、变量,常 量在程序运行过程中,其值不能被改变的量称为常量。VBA中有三类常量: 普通常量、符号常量 、系统常量 普通常量 整型常量:10、110%(Integer)、23&(Long) 实型常量:0.123
14、!(Single)、-1.123#、1.25E+3、-1.25E-3 字符串常量:“ABD”、“XYZ、”大家好” 逻辑常量:ture、false 日期常量:#2002-5-4 14:30:00 PM#、#09/02/99#,VBA数据类型、常量、变量,符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。 关键字Const 声明符号常量,基本语法如下Const 常量名 As 类型 | 类型符号=常数表达式,例如:Const PI#=3.1415926535 等价于:Const PI As Double=3.1415
15、926535,VBA数据类型、常量、变量,系统常量VBA系统提供了应用程序和控件的系统定义常数。它们存放于系统的对象库中,在“对象浏览器”中能查看这些常数。,颜色常数 常数 值 描述 vbBlack 0x0 黑色 vbRed 0xFF 红色 vbGreen 0xFF00 绿色 vbYellow 0xFFFF 黄色 vbBlue 0xFF0000 蓝色 vbMagenta 0xFF00FF 紫红色 vbCyan 0xFFFF00 青色 vbWhite 0xFFFFFF 白色,星期常数 常数 值 描述 vbUseSystem 0 vbSunday 1 星期日 vbMonday 2 星期一 vbTu
16、esday 3 星期二 vbWednesday 4 星期三 vbThursday 5 星期四 vbFriday 6 星期五 vbSaturday 7 星期六,VBA数据类型、常量、变量,变 量程序中的变量为临时存在单元,可存放文字、数值、日期和对象属性。每个变量都有一个名字,程序通过变量名对变量进行存取操作。 用Dim语句显式声明变量1、Dim 变量名 AS 类型 或 Dim 变量名类型符2、声明的每个变量都要一个单独的 As 类型 子句,没有的作为变体类型( Variant ),例1:Dim iCount As integer , sum As single等价于:Dim iCount%,
17、sum! 例2:Dim iCount As integer , sum则声明了两个变量,其中icount为整型,sum为变体型,VBA数据类型、常量、变量,隐式声明变量VBA允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。VBA根据程序中赋予变量的值来自动调整变量的类型。,例如:变量a, b, Sum都没有事先定义。 Private Sub Form_Click()Sum = 0a = 10: b = 20Sum = a + bdebug.Print “Sum=“& Sum End Sub,VBA
18、数据类型、常量、变量,强制显式声明变量Option Explicit良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。VBA中可以强制显式声明,在窗体模块、标准模块和类模块的通用声明段中加入:Option Explicit,VBA数据类型、常量、变量,变量的作用域和生命周期VBA中,变量定义的位置和方式不同,则变量存在的时间和起作用的范围也有所不同,即变量的作用域与生命期。变量的可见性:即可对变量进行操作的状态。变量作用域的三个层次:局部范围(过程级别)、模块范围、全局范围,VBA数据类型、常量、变量,局部范围(过程级别):定义在模块的过程内部,
19、只有在声明此变量的过程中才可使用 定义方式:Dim x As Singl Static y As single 用Dim 定义的局部变量只有在它所在的过程运行时才会有值 Static定义的局部变量在整个程序运行期间均有值,所以它可以作为中间变量保存结果。 模块范围(Private ):定义在模块的所有过程外部的起始位置,运行时在模块所包含的所有子过程和函数中可见。 全局范围(Public):定义在模块的所有过程外部的起始位置,运行时在所有类模块和标准模块的所包含的所有子过程和函数过程中都见。一般函数默认为Public,变量的作用域和生命周期举例,x全局变量 y过程变量 z过程静态变量,数 组,
20、数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。 一维数组(线状) Public/Private/Static/Dim 数组名 (下界 To 上界) As 数据类型 下界和上界不能使用变量,必须是常量,一般是整型常量。,例如:Dim Workers(8) As Integer 未定义下界,下届默认为0,有08共9个元素Dim Workers(1 To 8) As Integer 下届为1,上届为8,有18共8个元素,数组的引用 数组必须先定义后使用 使用形式:数组名(下标) 下标可
21、以是整型变量、常量或表达式。 引用不能下标越界,通常可以通过一个For循环处理数组 Dim Numbers(1 To 10) As IntegerDim I As IntegerFor I=1 To 10Numbers(I)=30Next I 如果I=11怎么办?,二维数组(表的形式)和多维数组 Dim 数组名(下界 To 上界,下界 To 上界,) As 数据类型dim Aa(19,19) As Integer 等价于 dim Aa(1 To 20,1 To 20) As Integer,下面将值30赋给数组:Dim I As Integer,J As IntegerDim Aa(9,9)
22、As IntegerFor I=0 To 9For J=0 To 9Aa(I,J)=30Next JNext I,动态数组 如果在程序运行之前不能肯定数组的大小,可以使用动态数组。 申明方法:Dim 数组名()As 数据类型 过程中用ReDim语句改变数组的大小ReDim Preserve 数组名(下标1,下标2) ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。 每次使用ReDim语句都会使原来数组中值丢失。 可以在ReDim后加Preserve 参数来保留数组中的数据。但此时 只能改变最后一维的大小。,例1:利用Redim改变数据维数和大小。 Su
23、b arraychange()Dim x( ) as integerReDim x(20)x(20) = 30debug.Print x(20)ReDim x(20, 5)x(20, 5) = 10debug.Print x(20, 5) End sub,例2:利用Preserver保留数组中的值。 Sub arraychange()Dim x( ) as integerReDim x(20)x(20) = 30debug.Print x(20)ReDim Preserve x(30)debug.Print x(20) End sub,运算符,1. 算术运算符(均是双目运算,ia=3),例如:
24、 5+10 mod 10 9 / 3 +2 2 结果是?,2. 字符串运算符 字符串运算符有:、+(连接两字符串) 区别 +(连接运算):两个操作数均应为字符串类型; &(连接运算):两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。,例: “100“ + “123“ 结果为 100123“Abc“ + 123 出错“100“ & 123 结果为 100123100 & 123 结果为 100123“Abc“ & 123 结果为 Abc123,3.关系运算符,4.逻辑运算符 非Not、与And 、或Or、异或Xor、逻辑相等(同或)Eqv 、 隐
25、含(逐位比较)Imp Not逻辑非为单目运算符(要求一个操作数),其它为双目运算符。,0:false,1:true,5.运算符的执行顺序 表达式中的多种不同类型的运算符的优先级如下: 算术运算符=字符运算符关系运算符逻辑运算 基本说明: 当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符,在各类运算中再按照相应的优先次序进行。 可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。,常用函数,VBA中提供了各种函数,利用函数可以完成许多相关的操作。其使用形式如下:函
26、数名(参数列表),要点说明 1.在三角函数中的自变量是以弧度为单位。如:sin300 sin(3.14159/180*30) 2.取整函数int()和fix() Fix(N)为截断取整,即去掉小数后的数:Fix(9.59)=9 Int(N)不大于N的最大整数:Int(9.59)=9、Int(-9.59)=-10,要点说明 3. Rnd函数返回01(包括0和不包括1)之间的双精度随机数。例:产生1-100的随机整数:Int(Rnd *100)+1怎样产生N,M区间的随机数?int(N+(M-N+1)*Rnd)例 Int(100+201*Rnd) 随机数100,300 4.类型转换函数 Asc(“
27、Abcd”) 值为65 只取首字母的Ascii值 Val(“abc123“) 值为0, Val(“1.2sa10“) 值为1.2注意: Val( )函数只将最前面的数字字符转换为数值。,5.日期函数 Date():返回系统日期,如 2008-03-25 Time():返回系统时间,如 19:30:25 Now():返回系统日期和时间:2008-03-25 19:30:25 Weekday(时间,w):返回17的整数,表示星期几。 其中可选参数w是指定一星期的第一天是星期几的常数。 例:weekday(#2004-2-29#)=1 即2004-2-29为星期天 若 weekday(#2004-2
28、-29#,3)=6 即让星期二为第一天 DateAdd()、DateDiff()相关参数,三种基本结构程序设计,传统流程图中的基本符号,三种基本结构,三种基本结构,选择结构,1. IfThen语句(单分支结构)If Then语句块End If 或 If Then ,例:已知两个数x和y,比较它们的大小,使得x大于y.If xy Thent=x : x=y: y=tEnd If或 If xy Then t=x: x=y: y=t,2. IfThenElse语句(双分支结构)If ThenElse End IfIf Then Else ,例:输出x,y两个中值较大的一个值。 IF XY ThenP
29、rint X ElsePrint Y End If 单行形式:IF XY Then Print X Else Print Y,2. IfThenElse语句(双分支结构)If ThenElse End IfIf Then Else ,例:输出x,y两个中值较大的一个值。 IF XY ThenPrint X ElsePrint Y End If 单行形式:IF XY Then Print X Else Print Y,3. IfThenElseIf语句(多分支结构)形式: If ThenElse If ThenElse If Then Else 语句块 n+1 End If,If x=90 th
30、enPrint “优秀“ ElseIf x=80 ThenPrint “良好“ ElseIf x=70 ThenPrint “中等“ ElseIf x=60 ThenPrint “及格“ ElsePrint “不及格“ End If,例:输入一学生成绩,评定其等级。方法是:90100分为“优秀”,8089分为“良好”,7079分为“中等”,6069分为“及格”,60分以为“不合格”,Select Case语句(情况语句),Select Case 变量或表达式Case 表达式列表1语句块1Case 表达式列表2语句块2Case Else语句块n+1 End Select,:与同类型的下面四种形式
31、之一:表达式 A +5一组枚举表达式(用逗号分隔) 2, 4, 6, 8 表达式1 To 表达式2 60 to 100 Is 关系运算符表达式 Is 60,数值型或字符串表达式,Select Case x Case 90 to 100Print “优秀“Case 80 to 89Print “良好“Case 70 to 79Print “中等“Case 60 to 69Print “及格“Case Else Print “不及格“ End Select,例:使用select case语句来实现成绩等级评选,程序段如下,选择结构的嵌套在IF语句的Then分支和Else分支中可以完整地嵌套另一IF
32、语句或Select Case语句,同样Select Case语句每一个Case分支中都可嵌套另一IF语句或另一Select Case语句。下面是两种正确的嵌套形式:,(1)IF Then if ThenElse End If.Else.IF ThenElseEnd IfEnd IF,(2)IF Then Select Case Case IF ThenElseEnd IfCase.End Select. End IF,VBA的三个选择函数 IIF函数: IIf(条件式、表达示1,表达示2) 条件为真,返回表达式1的值;为假,返回表达示2的值 如:IIf(ab,a,b) 返回a,b中较大的值 S
33、witch函数 switch(条件式1,表达式1条件式2,表达式2) 条件式与表达式成对出现,如条件式为真,则返回对应表达式的值 y=switch(x0,1,x=0,0,x0,1) 根据x的值来为y赋值。 Choose函数 Choose(索引式,选项1,选项2,选项n) 根据索引式的值返回选项列表中的某个值 y=choose(x,1,m,7,n) 根据x的值来为y赋值。,循环结构 DoLoop:通过Do来执行循环,有四种形式。其中While是条件为真时循环,Until是条件为假时循环。,形式1、2(当型循环) :Do While|Until 语句块Exit Do语句块Loop,当型循环举例,S
34、ub Command1.Click()Dim I As IntgerI=1Do While I=20Print II=I+1Loop End Sub,Sub Command1.Click()Dim I As IntgerI=1Do Until I=20Print II=I+1Loop End Sub,结果I21,结果I=1,循环结构,形式3、4:(直到循环)Do 语句块Exit Do语句块Loop While|Until ,直到循环举例,Sub Command1.Click()Dim I As IntgerI=1Do Print II=I+1Loop While I=20 End Sub,Su
35、b Command1.Click()Dim I As IntgerI=1Do Print II=I+1Loop Until I=20 End Sub,结果I=21,结果I=2,WhileWend语句循环结构,While Wend,说明:该语句的功能与Do While .Loop实现的循环完全相同。,Sub Command1.Click()Dim I As IntgerI=1While I=20Print II=I+1Wend End Sub,For循环语句 (一般用于循环次数已知),For 循环变量初值 to 终值 Step 步长语句块Exit For语句块Next 循环变量,For循环语句
36、(一般用于循环次数已知),循环次数,例: For I=2 To 13 Step 3 Print I , Next I Print “I=“, I 循环次数?输出结果?,循环执行次数 输出I的值分别为:2 5 8 11 出了循环输出为: I=14,循环的嵌套多重循环结构如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定。以下是各种嵌套循环的示例:,(1)For I=.For J=.Next JNext I,(2)For I=.Do While/Until .LoopNext I,(3)Do While.For J=.Next JLoop,(4)Do
37、While/Until.Do While/Until .LoopLoop,对于循环的嵌套,要注意以下事项: (1) 内循环变量与外循环变量不能同名; (2) 外循环必须完全包含内循环,不能交叉;(3) 不能从循环体外转向循环体内,也不能从外循环转向内循环.正 确 错 误,For ii =1 To 10 For ii=1 To 20 Next ii Next ii,其它语句,Goto 语句 形式: GoTo 标号|行号作用是无条件地转移到标号或行号指定的那行语句. 由于goto语句破坏了程序的逻辑顺序,一般不赞成使用,If Number = 1 Then GoTo Line1 Else GoTo
38、 Line2 Line1:标号1MyString = “Number equals 1“ Line2:标号2MyString = “Number equals 2“,1.Exit 语句 Exit 语句用于退出 Do.Loop、For.Next、Function或Sub代码块。 对应的使用格式为:Exit Do、Exit For、Exit Function、Exit Sub。分别表示退出DO循环、For循环、函数过程、子过程。,例如:下面的例子是使用 Exit 语句退出 For.Next 循环、Do.Loop 循环及子过程。,Private Sub Form_Click() Dim I%, Nu
39、m%Do 建立无穷循环。For I = 1 To 100 循环 100 次。Num = Int(Rnd * 100) 生成一个099的随机数。Select Case Num Case 10: Exit For 退出 For.Next 循环。Case 50: Exit Do 退出 Do.Loop 循环。Case 64: Exit Sub 退出子过程。End SelectNext ILoop End Sub,2.With.End With 语句With 对象名语句块End With说明:With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。,例如,要改变一个对象的多个属性,可以在
40、 With 控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用 With 语句来给同一个对象的几个属性赋值。,需要对同一对象设置几个属性。途径之一是使用多条语句。 Private Sub Form_Load()Command1.Caption = “退出(E&xit)“Command1.Top = 500Command1.Left = 4500Command1.Enabled = True End Sub 使用With.End With 语句,上面程序的代码如下。 Private Sub Form_Load()With Command
41、1.Caption = “OK“.Top = 500.Left = 4500.Enabled = TrueEnd With End Sub,VBA中的常用操作,1.消息窗MsgBox消息窗用于显示消息,等待用户单击按钮,并返回一个整型值。基本格式:MsgBox (提示,按钮图标 +缺省按钮+ 模式,标题),10.10 VBA中的常用操作,根据用户所选按钮,函数返回1到7的整数值,其含义如下,2.输入框InputBox提示并获取用户输入的值。基本格式: 变量名=InputBox$(, ),注意:输入区缺省值有$返回字符类型,否则为数值类型.提示文本如需换行,则用 Chr(13) + Chr(10
42、) 将各行分开。,返回字符类型举例:有下列语句如下:Dim strName As String( 40), strS1 As String(40)strS1 = “请输入你的姓名” + Chr(13) + Chr(10) + “然后单击确定”strName= InputBox$(strS1, “输入框”, , 100,100) 当键盘输入“王晓明” 后,变量strName获得键盘输入的值.,1. DoCmd对象VBA中可以通过调用DoCmd对象的方法来实现对Access的各种操作。,打开各种ACCESS对象示例,关闭ACCESS中的对象DoCmd.Close objecttype, objec
43、tname, save objecttype 下列固有常量之一:,acDefault(默认值) acDiagram 图 acForm 窗体 acMacro 宏 acDataAccessPage 数据访问页,acModule 模块 acQuery 查询 acReport 报表 acTable 表,关闭各种ACCESS对象示例,2. 计时事件TimerVBA可通过设置窗体的“计时器间隔(TimerInterval)”属性与添加“计时器触发器(Timer)”事件来完成“定时”功能。基本处理过程:Timer事件每隔TimerInterval时间间隔被激发一次,然后运行Timer事件过程来响应。,Pri
44、vate Sub Form_Timer()Labeltime.Caption = CStr(Now() End Sub,3. 运行错误处理程序中一定要合理的设置错误处理,以便处理程序在不可预知的情况下发生错误。如果仅由操作系统来处理这些错误,不仅会让用户不知所措,还会造成灾难性的后果。VBA中提供了以下语句来处理程序运行时的错误: On Error GoTo 标号:发生错误时转移到标号处进行处理 On Error Resume Next:忽略的发生错误,执行下面语句 On Error GoTo 0:关闭出错处理,过程调用与参数传递,Sub子过程在VBA中,的Sub子过程分为:事件过程和通用过程
45、 1.事件过程,(2)控件事件的语法 Private Sub 控件名_事件名(参数列表) 语句组 End Sub,(1)窗体事件的语法 Private Sub Form_事件名(参数列表) 语句组 End Sub,2.通用过程,子过程的定义形式如下: Public|PrivateStatic Sub 子过程名(形参表)语句组Exit Sub语句组 End Sub,说明: (1)子过程名:命名规则与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。,(2)形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时
46、,虚实参结合后才获得相应的值。 (3)过程可以无形式参数,但括号不能省。 (4)参数的定义形式:ByValByRef变量名( )As 类型,, ByVal表示当该过程被调用时,参数是按值传递的; ByRef(缺省)表示当该过程被调用时,参数是按地址传递的。,例. 一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer)Dim temp As IntegerTemp=X : X=Y : Y=Temp End Sub,Function过程,Public|PrivateStaticFunction 函数名()As函数体函数名=返回值
47、Exit Function函数名=返回值 End Function,注意:在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在函数过程中至少要对函数名赋值一次。,过程的调用,1 子过程的调用子过程名 参数列表或 Call 子过程名(参数列表)2 函数过程的调用变量名 = 函数过程名(参数列表),说明:(1)参数列表称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。,(2)调用时把实参值传递给对应的形参。其中值传递时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。(3)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。(4)调用子过程的形式有两种,用Call关键字时,实参必须加圆括号括起,反之则实参之间用“,”分隔。,例:调用上面定义的Sawp子过程的形式:Swap a,bCall Swap(a,b),Private Sub CmdOK()Call Swap(a,b)Swap a,b End Sub,Private Sub Swap(x%,y%)Dim temp%Temp=X X=Y Y=Temp End Sub,