第8章 VBA编程入门

上传人:小*** 文档编号:243355523 上传时间:2024-09-21 格式:PPT 页数:100 大小:429KB
收藏 版权申诉 举报 下载
第8章 VBA编程入门_第1页
第1页 / 共100页
第8章 VBA编程入门_第2页
第2页 / 共100页
第8章 VBA编程入门_第3页
第3页 / 共100页
资源描述:

《第8章 VBA编程入门》由会员分享,可在线阅读,更多相关《第8章 VBA编程入门(100页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,*,,Edit Master title,,Click to edit Master text styles,,Second level,,Third level,,Fourth level,,Fifth level,,,第,8,章,VBA,编程入门,,VBA(Visual,Basic for Application),是,Microsoft Office,系列软件的内置编程语言,其语法结构与,Visual Basic,编程语言互相兼容,采用的是面向对象的编程机制和可视化的编程环境。,8-1 VB

2、A,概述,8-1-1 VBA,简介,,集合和对象,,VBA,中的应用程序是由许多对象组成的,如表、窗体、查询等。对象是帮助构造应用程序的元素,以特定的方式组织这些对象,就形成了应用程序。,,数据库窗口把可供选择的对象排列在一起,形成不同的类。,8.1.2,面向对象程序设计的基本概念,,对象的属性、事件和方法,属性,,,属性描述了对象的自身性质。其格式为:,,,对象名,.,属性,=,属性值,,事件,,事件是指可以发生在一个对象上且能够被该对象所识别的动作。,,如:单击某个命令按钮就产生该按钮的,“,单击,”,事件,,当某个对象发生某一事件后,就会驱动系统去执行预先编好的、与这一事件相对应的一段程

3、序。,,,方法,,方法是系统事先设计好的,可以完成一定操作的特殊过程,是附属于对象的行为和动作。在需要使用的时候可以直接调用。,,其调用格式为:,对象名,.,方法名,,Access,中除数据库的,7,个对象外,还提供一个重要的对象:,DoCmd,对象,,除窗体、控件的,SetFocus,(,获得控制焦点,),方法外,用得最多得是,DoCmd,对象,的一些方法。使用这些方法,可以在,VBA,中运行,Access,的操作。,,(1),打开当前数据库中的,“,教师信息窗体,”,并显示男教师的记录,,DoCmd.OpenForm,,formname,[,,view][,filtername,], [,

4、,wherecondition][,datamode][,windowmode,],,例:,DoCmd.OpenForm,,“,教师信息窗体,”,, , ,,“,性别,=,‘,男,’”,,,DoCmd.OpenForm,,“,学生基本信息,”,,,,,,,acDialog,,,说明,: view,可以取下列值之一,: (1)acNormal(,默认值,,,显示窗体视图,),,acDesign,(,显示窗体设计视图,),,acFormDS,(,显示数据表视图,),,,DoCmd,,对象的常用方法(参照教材,P239,页),,(2),打开当前数据库中的报表,,,DoCmd.OpenForm,,re

5、portname,[,,view][,filtername][,wherecondition,],,,例,:,DoCmd.OpenForm,,“,学生成绩,”,,,acViewNormal,,(3),打开查询,,DoCmd.OpenQuery,,查询名,[,,view][,datamode,],,说明,:,datamode,,表示查询的输入模式,,,仅应用于,”,数据表,”,视图中打开的查询,,,可取下列值之一,:,,(1)acEdit(,默认值,,,编辑记录模式,),(2)acAdd(,添加记录模式,), (3)acReadOnly(,只读模式,),,例,:,DoCmd.OpenQuery,

6、,“,学生成绩查询,”,,,,acReadOnly,,(4),删除数据库中的对象,,DoCmd.DeleteObject,[,,对象类型,][,,对象名,],,例,:,,DoCmd.DeleteObject,,acTable,,,”,课程表,”,,(5),关闭数据库对象,,DoCmd.Close,[,,对象类型,][,,对象名称,][,,是否保存,],例,:,DoCmd.Close,,acQuery,,,“,学生成绩查询,”,,,acSaveYes,,,8.1.3 VBA,编程环境,,1.,进入,VBE,编程环境,,2. VBE,窗口的组成,,,VBE,窗口由工具栏、工程资源管理器窗口、,,属

7、性窗口、代码窗口和立即窗口组成。,,3.,在,VBE,环境中编写,VBA,代码,,,工程窗口,,-选择对象,属性窗口,,-选择对象的属性,代码窗口,选择事件,VBE,编程环境,,8.2 VBA,编程基础,,8.2.1,常量、变量,,VBA,使用常量、变量来存储值。用来保存在程序运行期间数据。,,常量,,,在程序运行过程中,其值,不会被改变,的量称为常量。在,VBA,中有三类常量:,,(1),直接常量,,,如:,10,,,20%,,,123.0,,“,VBA,程序设计”等,,(2),系统常量,,,,指,VBA,系统预先定义好的,用户可以直接引用的量。,,如:,acForm,,,acQuery,,

8、,vbOk,,,vbRed,,(3),符号常量,,,在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。,,,VBA,中使用关键字,Const,,声明符号常量。,,其格式如下:,,,Const,常量名,[As,类型,]=,常数表达式,,如:,,,,Const,PI,=3.1415926,,Const,constr,=,“,abcdef,”,,Const,ConAge,As Integer=19,,Const Pi = 3.1415926,,Public Sub area( ),,Dim r As Integer,,Dim

9、cir, area As Integer,,r =,InputBox,(",请输入圆的半径,:"),,cir = 2 * Pi * r,,area = Pi * r * r,,MsgBox,",圆的周长是,:" & cir & ",圆的面积是,:" & area,,End Sub,,,变量,,在程序中使用变量,就要给变量定义名称及类型,即对变量进行声明,,变量命名规则,,变量名必须以字母或汉字开头,后可跟字母、汉字、数字或下划线组成(不能含有小数点和空格),长度不超过,255,个字符的字符串;,,不能使用,VBA,中的关键字;,,VBA,中不区分变量名的大小写;,,变量名的最后一个字符可以是,

10、%,、,&,、!、,#,、,$,等表示数据类型的声明符。,A$,,8.2.2,数据类型与变量的声明,数据类型,类型声明符,存储空间,取值范围,整型(,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.940656458412

11、47E-324,,正数:,4.94065645841247E-324,~,,1.79769313486232E308,货币型,,(Currency),@,8,-922337203685477.5808,~,,922337203685477.5807,日期型,(Date),,8,100,年,1,月,1,日~,9999,年,12,月,31,日,字符型,(String),$,,0,字符~,65400,个字符,字节型,(Byte),,1,0,~,255,逻辑型,(Boolean),,2,True,或,False,对象型,(Object),,4,任何引用的对象,变体型,(Variant),,,,,变量声

12、明,,1),用,Dim| Static,语句显式声明局部变量,,格式,:,Dim,变量名,[AS,类型,],,,或,Dim,变量名 类型符,,,语句中的“,As,类型”子句是可选的。如果使用该子句,就可以定义变量的数据类型。未使用,默认变量的类型为变体型(,Variant,)。,,例如:,Dim i As integer, s,,,表示声明了一个名为,i,的整型变量和一个名为,s,的变体型变量。,,或,Dim i %,s,,或使用类型符定义,,例,: name $=“,李玲,”,,mark% = 86,,输出测试语句,,Debug. Print [,表达式列表,][;|,],,例,:,变

13、量的输出结果,,2),静态变量,,Static,声明,:,Static,声明的变量,也称为静态变量。静态变量在程序运行过程中一直保留其值,,即,每次调用过程,变量保持原来的值。,,隐式声明变量,,,未进行上述的声明而直接使用变量,称变量的,隐式声明,。采用隐式声明的变量都是变体型(,Variant,)。,,,注意,:,,,VBA,中允许不事先声明而直接使用变量,可以通过语句,,Option Explicit,,来要求所使用的变量必须事先声明,否则,VBA,会发出警告信息。,,下面是一个简单的程序,其使用的变量,a, b, Sum,都没有事先定义。,,Private Sub Form_Click

14、(),,,Sum,= 0,,,a,= 10,,,b,= 20,,Sum = a + b,,Print "Sum="; Sum,,End Sub,,,良好的编程习惯应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。,VBA,中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句:,Option Explicit,,,,声明而未赋值的变量的值为:,,数值型变量初始化为,0,;,,字符型变量为零长度字符串;,,变体型变量初始化为,Empty,。,,,变量的初始化,,8.2.3,运算符和表达式(教材,P251,页),,运算符,,1.,算术运算符,,例

15、如:,"123" + "456",,结果,"123456",,,,"123" & "456",,结果,"123456",,,使用上& 与,+,的区别:,,例如:,",abcdef," & 12345,,结果为,",abcdef12345",,,"123" & 456,,结果为,"123456",,,,",abcdef," +12345,结果为,,出错,,,"123" + 456,结果为,579,,,2.,连接运算符:,,&,、,+,(字符串连接),,,将两个操作数进行大小比较,结果为逻辑值。,,,注意:,字符串比较,,,则按字符的,ASCII,码值从左到右一一比较,直到出现不同的字符为止。,3

16、.,关系运算符,,4.,逻辑运算符,,将操作数进行逻辑运算,结果是逻辑值,,,5.,表达式,组成,,,由变量、常量、函数等运算对象加上运算符、圆括号组成的式子。,,书写规则,,,(1),运算符不能相邻。例,a+ -b,是错误的。,,,(2),乘号不能省略。例,x,乘以,y,应写成:,x*y,。,,,(3),括号必须成对出现,均使用圆括号。,,,(4),表达式从左到右在同一基准上书写,无高低。,,运算优先级,,,算术运算符,>,连接运算符,>,关系运算符,>,逻辑运算,,,例,1:,用人单位招聘秘书,:,年龄小于,40,岁的女性,,,学历专科或本科,,,年龄,<40,,性别,=,“,女,”,,,

17、(,学历,=,“,专科,”,,学历,=,“,本科,”,),,,And,And,Or,,考虑:,若分别写成:,,年龄,<40 And,性别,= ",女," And,,(,学历,= ",专科," And,学历,= ",本科,"),,年龄,<40 Or,性别,= ",女," Or (,学历,= ",专科," Or,学历,= ",本科,"),,例,2,:算术表达式:,,正确的,VBA,表达式:,3〈=x And x <=7,,,错误的,VBA,表达式:,3<=x<=7,或,,3<=x Or x<=7,,,,,8.2.4,常用函数,,函数实际上是系统事先定义好的内部程序,用来完成特定的功能。

18、,VBA,提供了大量的内部函数,供用户在编程时使用。,,,函数的调用形式为:,,函数名,(,参数表,),,常用内部函数,,,参照教材,P253,页表,8-6,常用内部函数,,,,,输入、输出函数,,InputBox,函数,,,InputBox,(<,提示信息,>[,,对话框标题,][,,默认内容,][,x,坐标,,y,坐标,]),,其中:提示信息不能省略;,,对话框标题,,,若省略则显示默认,Access,;,,第三个参数:对话框上文本框中的输入信息,,,如果没有输入,,,则将默认内容作为输入的内容。,,,注意:函数的返回值为字符型数据。,,例,:Dim,stu,as string,,Str,

19、=,InputBox,(,“,请输入学生姓名,”,,,”,输入函数应用,”,),,,MsgBox,函数或方法,(,用于显示输出信息,),,使用,MsgBox,,可以在对话框中显示文本信息。,,格式为:,,,MsgBox,(提示信息,[,,按钮数目和类型,][,,标题,],),,MsgBox,函数:变量,[%]=,MsgBox,(<,提示信息,>[,,按钮形式,][,,对话框标题,]),,MsgBox,方法:,MsgBox,(<,提示信息,>[,,按钮形式,][,,对话框标题,]),,说明,:(1)<,提示信息,>,不能省略,,(2)[,按钮形式,],是一个整数值,,,用来设置消息框中按钮的形式

20、,,,显示的图标类型和设置默认的活动按钮,,,三者以,”,和,”,的形式存在,,,例,: Dim,stu,As String,,str,=,MsgBox,(“,请确认输入的学生名,”,, 3+32+0, ”,输入姓名,”,),,或,:,str,=,MsgBox,(“,请确认输入的学生名,”,,,VbYesNoCancel+VbQuestion,+VbDefaultButtonn1, ”,输入姓名,”,),,(3),当单击消息框上的按钮时,,,返回一个整数值,,,系统判断用户单击了哪个按钮,.,,,例,8.2.5,以下过程使用,InputBox,函数返回由键盘输入的用户名,,,并在消息框中显示字

21、符串,,,Private Sub hello( ),,Dim,str,,,msg,As String,,str,=,InputBox,(",请输入你的名字,", ",用户信息,"),,MsgBox,",你好,!" &,str,,,vbInformation,, ",问候,",,End Sub,,,,,8.3 VBA,常用语句,,8.3.1 VBA,语句书写规则,,VBA,代码不区分字母的大小写,,,系统保留字自动转换每个单词的首字母大写;,,,语句书写自由,,(1),一行可书写几句语句,之间用冒号,(:),分隔;,,(2),一句语句可分若干行书写,用续行符,(,一个空格加一个,_,组成,),将

22、语句分开,,8.3.2 VBA,常用语句,,1.,赋值语句:,,给变量、常量或对象的属性指定一个值或表达式。,,格式:,[LET],变量名=表达式,,,作用:将表达式的值赋值给变量名。 一般用于给变,,量赋值或对控件设定属性值。,,例如:,s=10,,Text1.Text,=,",欢迎使用,VBA",,注意:,虽然赋值号与关系运算符等于号都用,“,=,”,表示,,VBA,会根据所处的位置自动判断是何种意义的符号,,2.,声明语句:命名和定义常量、变量、数组以及过程。,,格式,: Dim |Static|,Private|Public,,变量名,[as,类型,][,,变量名,[as,类型,],,

23、3.,注释语句,,在程序中的适当位置加上注释语句有利于程序的维护和阅读。,,,格式:,Rem,,注释内容,,或用单引号 ’ 注释内容,,,结构化程序设计由,顺序、分支、循环,这,3,种基本结构所组成。,语句组,2,语句组,1,T,F,语句组,2,条件,语句组,1,,8-4 VBA,程序流程控制,F,T,条件,语句组,T,F,条件,语句组,,分支结构,,单行,If,语句,,格式:,If,表达式,,Then,语句,1 [Else,语句,2],,功能:,If,测试指定的条件,如果条件表达式为真,(True),,则执行,Then,后面的语句,1,,否则执行语句,2(,若,Else,子句未省略)。,T

24、,F,语句,2,条件,语句,1,T,F,条件,语句,1,,1.,单行,If,语句,,Private Sub prg3( ),,Dim a As Integer,,a =,Val(InputBox,(",请输入一个整数,",",判断奇偶数,"),,If,a Mod 2=0,Then,,MsgBox,,",偶数,",else,MsgBox,,",奇数,",,End Sub,,例,:,输入三个整数,,,然后把这,3,个整数按从小到大的顺序重新排序输出,,Private sub prg4( ),,Dim a, b, c, temp as Long,,a=,val(InputBox,(“,请输入第一个

25、数,:”)),,b=,val(InputBox,(“,请输入第二个数,:”)),,c=,Val(InputBox,(“,请输入第三个数,:”)),,If a > b Then ',执行,If,语句后,, b,中存放,a,b,中最大数,,,temp = a,,a = b,,b = temp,,End If,,If b > c Then ',执行,If,语句后,, c,中存放,a,b,c,中最大数,,,temp = b,,b = c,,c = temp,,End If,,If a > b Then ',执行,If,语句后,, b,中存放三个数中次大数,,,temp = a,,a = b,,b =

26、temp,,End If,,MsgBox,",三个数从小到大的顺序为,:" & a & Space(2) & b & Space(2) & c,,End Sub,,多行,If,语句,,格式:,If,表达式,,Then,,,语句组,1,,[Else,,,语句组,2],,End If,,多行,If,语句的执行过程是:,如果,“,表达式,”,的值为真,则执行语句组,1,;否则执行语句组,2,。当执行完语句组,1,或语句组,2,后,程序流程跳转到语句,End If,的后面。,,语句组可以由一条或多条语句组成,语句组不能与,Then,书写在同一行,否则,VBA,认为是一个单行,If,语句,会导致,Els

27、e,没有匹配的,If,。,,语句,“,End If,”,是多行,If,语句的结束标志。,在多行,If,语句中,即使省略,Else,子句,也要写该结束标志。省略,Else,子句时的多行,If,语句形式为:,,,If,表达式,Then,,,语句组,,,End If,,,例:计算分段函数,单行,If,语句实现:,,If x=0 Then y=,cos(x,),-,x^3+3*x,,If x0 Then y=,sin(x)+sqr,(x*x+1),,多行,If,语句实现:,If x0 Then,,y=,sin(x)+sqr,(x*x+1),,Else,,y=,cos(x,),-,x^3+3*x,,

28、End If,,If,语句的嵌套,,If,语句的嵌套是指,If,或,Else,后面的语句块中又包含,If,语句。,,,,If <,表达式,1> Then,,,If <,表达式,11> Then,,…,,End If,,,…,,,End If,,例,:,修改,prg4(),,用嵌套的,if,语句实现,:,输入三个整数,,,然后把这,3,个整数按从小到大的顺序重新排序输出,,Private sub prg4(),,Dim a, b, c, temp as Long,,a=,InputBox,(“,请输入第一个数,:”),,b=,InputBox,(“,请输入第二个数,:”),,c=,Input

29、Box,(“,请输入第三个数,:”),,If a>b then,,temp=,a;a,=,b;b,=temp,,End if,,,,If b>c then,,temp=,b;b,=,c;c,=temp,,if a>b then,,temp=,a;a,=,b;b,=temp,,end if,,End if,,MsgBox,“,三个数从小到大的顺序为,:”&a &space(2) &b & space(2) &c,,End sub,,,If…Then…,ElseIf,语句,(,多分支结构,),,,If <,表达式,1> Then,,<,语句块,1>,,,ElseIf,<,表达式,2> Then,,

30、<,语句块,2>,,…,,[,Else,,,语句块,n+1,],,,End If,,说明,:,,不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有,Else,子句,则执行该语句块,否则什么也不执行。,,ElseIf,不能写成,Else If,。,,例,8-6:,根据输入的一个分数,,,判断对应的成绩等级,,,分数在,90—100,分记为,A, 80—89,为,B , 70—79,为,C, 60—69,为,D,0—59,为,E,,否则显示出错信息,.,,Private Sub prg5( ),,Dim mark As Integer,,mark =,

31、InputBox,(",输入一个,0—100,之间的分数,", ",判断成绩等级,"),,If mark >= 90 Then,,,MsgBox,",成绩为,A",,,ElseIf,mark >= 80 Then,,,MsgBox,",成绩为,B",,,ElseIf,mark >= 70 Then,,,MsgBox,",成绩为,C",,,ElseIf,mark >= 60 Then,,,MsgBox,",成绩为,D",,,ElseIf,mark >= 0 Then,,,MsgBox,",成绩为,E",,Else,,,MsgBox,",数据输入错误,",,End If,,End Sub,,,注意

32、:,出了循环,循环控制变量值的问题。,,例程序段:,,,For i=2 To 13 Step 3,循环执行次数,,,,debug.Print,i,输出,i,的值分别为,:,,2 5 8 11,,Next i,,debug.Print i,出了循环输出为,: i=14,,例,:,改变循环控制变量对循环的影响,,,Private Sub Command1_Click(),,j = 0,,For i = 1 To 20 Step 2,,,i = i + 3,,j = j + 1,,Print ",第,"; j; ",次循环,i="; i,,Next i,,Print ",退出循环后,i

33、="; i,,End Sub,,正常情况:,i=1,3,5,7,9,11,13,15,17,19,,现在:,i=4,9,14,19,,<,表达式列表,>,:与,<,变量或表达式,>,同类型的下面四种形式之一:,,,表达式,,例:,"A",,,一组枚举表达式,(,用逗号分隔,),,2,4,6,8,,,,表达式,1 To,表达式,2,,60 To 100,,,,Is,关系运算符表达式,,Is < 60,Select Case,语句,(,情况语句,),,语句格式:,,,Select Case,变量或表达式,,,Case,表达式列表,1,,,语句块,1,,Case,表达式列表,2,,,

34、语句块,2,,…,,,[Case Else,,,语句块,n+1],,,End Select,数值型或字符串表达式,,程序,流程图,语句块,n+1,语句块,1,语句块,2,语句块,n,条件,2,T,F,… ...,条件,n,T,F,条件,1,T,F,,例如:在输入成绩文本框中输入一个分数,单击,“,判断,”,命令按钮后,在成绩等级文本框中显示对应的成绩等级。输入的成绩在,90,~,100,分为,A,,,80,~,89,分为,B,,,70,~,79,分为,C,,,60,~,69,分为,D,,,0,~,59,分为,E,,,否则显示出错信息。,,,,,,,,,,,,,,,,,,,,,编程点拨:,,根据

35、题意,当输入的成绩不在,[0,,,100],内时,应显示出错信息,在该范围内时,应进行分等级。判断是否为合法成绩可用,If,语句,而分等级最好使用,Select Case,语句。,,,,,Private Sub prg6( ),,Dim mark As Integer,,mark =,InputBox,(",输入一个,0—100,之间的分数,", ",判断成绩等级,"),,Select case mark,,case is>= 90,,,MsgBox,",成绩为,A",,case is >= 80,,,MsgBox,",成绩为,B",,case is >= 70,,,MsgBox,",成绩为

36、,C",,case is >= 60,,,MsgBox,",成绩为,D",,case is >= 0,,,MsgBox,",成绩为,E",,case Else,,,MsgBox,",数据输入错误,",,End select,,End Sub,,,例:,变量,strC,中存放了一个字符,判断该字符类型。,,用多分支结构实现:,,,If,Ucase(strC,) >="A" And,Ucase,(,strC,) <="Z" Then Print,strC,+ ",是字母字符,",,,ElseIf,,strC,>="0" And,

37、strC,<="9" Then,,Print,strC,+ ",是数字字符,",,Else,,Print,strC,+ ",其他字符,",,End If,,用,Select Case,语句实现,:,,,Select Case,strC,,Case "a" To "z",,,"A" To "Z",,Print,strC,+ ",是字母字符,",,Case "0" To "9",,Print,strC,+ ",是数字字符,",,Case Else,,Print,strC,+ ",其他字符,",,End Select,,5.,条件函数,,,IIf,函数形式为:,,,IIf,(表达式,当表达式为,T

38、rue,时的值,当表达式为,False,时的值),,,例如:求,x,,,y,中大的数,放入,max,变量中。,,,max=,IIf,(,x > y,,,x,,,y,),,,a$=,iif(k,mod 2=0,,“,偶数,”,,,”,奇数,”,),,,,,8.4.3,循环结构,,1.For,…,Next,循环结构:,将一段程序重复执行指定的次数,其中使用一个计数变量,统计执行的次数。,,格式:,,For,循环变量=,<,初值,> to <,终值,> [Step,步长,],,,语句块,,,[Exit For],,,语句块,,,Next [,循环变量,],,,,,循环变量,,< =,终值,,,语句块

39、,,Exit For,,语句块,,循环变量加步长,,T,,F,,,循环变量得初值,,,例,8-8,:计算累乘程序,S=1*2*3*4,…,X,,,方法:接收一个累乘的终值,确定一个循环变量,循环变量有,2,个作用(乘数和循环变量),确定一个存储累乘积的变量。使用循环计算,最后输出显示结果。,,Private Sub prg7(),,Dim s As long, i As Integer,,x =,Val(InputBox,(",请输入累乘的终值,")),,S = 1,,For i = 1To x,,S = S * i,,Next i,,,MsgBox,",输出结果为,:" & S,,End S

40、ub,,,注意:,累乘的乘数和乘积变量的初值为,1,。,,Do…Loop,语句,(,循环结构,),,适用于循环次数未知的循环结构,,格式,(1)Do While <,条件,>,,<,语句组,>,,[Exit Do],,Loop,,或,: Do until<,条件,>,,<,语句组,>,,[Exit Do],,Loop,,格式,(2)Do,,<,语句组,>,,[Exit Do],,loop While <,条件,>,,格式,(2) Do,,<,语句组,>,,[Exit do],,Loop [While |Until<,条件,>],,Do…Loop,循环语句,(,用于控制循环次数未知,),,,形

41、式,1,:,,,,Do { While|Until }<,条件,>,,,语句块,,,[Exit Do,,,语句块,],,Loop,,形式,2,:,,,Do,,,,语句块,,,[Exit Do,,,语句块,],,Loop { While|Until} <,条件,>,,,Do While … Loop,语句,Private Sub prg8( ),,i=1,,Do While i<=10,,s=s+i,,i=i+1,,Loop,,当,i<=10,成立时,执行循环体,,循环变量,i,必须有初值,,防止产生死循环,,有可能一次也不执行循环体,修改循环控制变量,改变加数值,,,Do Until …

42、 Loop,,,Private Sub prg9( ),,,i=1,,Do Until i>10,,s=s+i,,i=i+1,,Loop,,,Debug.Print,s,,End Sub,,当,i>10,成立时,结束执行循环体,,有可能一次也不执行循环体,修改循环控制变量,改变加数值,,Do … Loop While,,Private Sub prg10( ),,i=1,,Do,,s=,s+i,,i=i+1,,Loop While i<=10,,,Debug.Print,s,,End Sub,,,3,:,While,…,Wend,语句,,格式如下:,,,While <,条件,>,,<,

43、循环块,>,,Wend,,说明:,该语句的功能与,Do While <,条件,>,…,.Loop,实现的循环完全相同。,,,例,:,计算 1,+3+5+……+99,,Private Sub prg12( ),,i=1,,S=0,,While i<=99,,s=s+1,,i=i+2,,Wend,,Debug.Print,“1+3+5+…+99=”;s,,End Sub,,8-5,数组,,数组:,数组不是一种数据类型,而是一组相同类型的变量的集合。可以像使用普通变量一,,样使用数组中的每一个元素。,,使用数组的好处是用一个,数组名,代表逻辑上相关的一批数据,用,下标,表示该数组中的各个元素,可

44、以提高处理数据的效率,缩短和简化程序。,,,,8.5.1,,数组的定义,,数组不是一种数据类型,而是一组相同类型的变量的集合,,数组必须先声明后使用。,,,两类数组: 静态,(,定长,),数组、动态,(,可变长,),数组,,,1.,静态数组,,,(1),一维数组,,,定义一维数组的形式:,,,Dim,数组名,([,下界,To],上界,) [As,类型,],,,声明了数组的名、维数、大小、类型,,,,例,: Dim mark(1 to 100) as integer,,,存储单元如下,:,,mark(1), mark(2),mark(3),….,mark(99),mark(100),,例,

45、: Dim b(5) as integer,,,存储单元如下,:,,b(0), b(1), b(2), b(3),b(4),b(5),b(6),,说明:,,数组名的命名规则与变量的命名相同。,,数组的元素个数:上界,-,下界,+1,。,,缺省,<,下界,>,为,0,,若希望下标从,1,开始,可在模块的通用部分使用,Option Base,语句将设为,1,。其使用格式是:,,Option Base 0|1,,',后面的参数只能取,0,或,1,,例如:,,,Option Base 1 ',将数组声明中缺省,<,下界,>,下标设为,1,,<,下界,>,和,<,上界,>,不能使用变量,

46、,必须是常量,,常量可以是直接常量、符号常量,一般是整型常量。,,如果省略,As,子句,则数组的类型为变体类型。,,2.,二维数组,,定义二维数组的形式:,,Dim,数组名,([,下界,1,To],上界,1,,,下界,2,To],上界,2,) As,类型,,例如:,Dim a(2,3) As Single,,,,二维数组在内存的存放顺序是,“先行后列”,。,,数组,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),,,例:,D

47、im,lArray,( 0 To 3,,,0 To 4) As Long,,共有,4,×,5,个元素等价于,: Dim lArray(3,,,4) As Long,,,3.,动态数组,,动态数组指在声明数组时未给出数组的大小,(,省略括号中的下标,),,当要使用它时,随时用,ReDim,语句,重新指出数组大小。,,形式如下:,,,ReDim,,数组名,(,下标,[,,下标,2…]) [As,类型,],,,例:,Private,,Sub S1( ),,,Dim x( ) As Single,,…,,,n =,Inputbox,(“,输入,n”,),,,ReDim,,x(n,),,…,

48、,,End Sub,,,说明:,,,,Dim,、,Static,、,Public,声明语句是说明性语句,可出现在过程内或通用声明段;,ReDim,语句是执行语句,只能出现在过程内;,,在过程中可多次使用,ReDim,来改变数组元素的个数,,,ReDim,中的下标可以是常量,也可以是有了确定值的变量。如:,n=,InputBox,(,“,输入,n,的值,”,),,,ReDim,,Arr(n,),,,静态数组在程序编译时分配存储单元,动态数组在运行时分配存储单元。,,8.5.2,数组的基本操作,,1.,数组元素的引用,,一维数组元素的引用,,使用形式:,数组名,(,下标,),,其中:,下标可以是常

49、量、整型变量或表达式。,,例如:,设有下面的数组,A,(10),、,B(10) As Integer,,,则下面的语句都是正确的。,,,A(1)=B(2)+B(1)+5 ',取数组元素运算,,,A(i,)=,B(i,) ',下标使用变量,,,A(i+2) = B(i+1) ',下标使用表达式,,注意:引用数组时不能下标越界,,引用二维数组的形式:,,数组名,([,下标,1,,下标,2,),,,下标,1,指定元素在二维表中所在的行,下标,2,指定元素在二维表中所在的列。,,例如:,a(1,2)=10,,a(

50、i+2,j),=,a(2,3)*2,,,在程序中常常通过二重循环来操作使用,,二维数组元素。,,,2.,数组元素的输入,,通过循环给数组元素的初值,,,For i = 1 To 10 'A,数组的每个元素值为,1,,,A(i,)=1,,Next i,,,,,数组的输入,(,通过,InputBox,( ),函数,),,For i = 1 To 4,,For j = 1 To 5,,,sc(i,, j) =,InputBox,(",输入,sc(" &i & "," & j & "),的值,"),,Next j,,Next i,,8.6,模块,,模块是,Access,数据库中的一个重要对象,是由

51、,VBA,语言编写的程序的集合。,,由于模块是由编程语言创建的,所以它的功能比,Access,数据库中其他对象的功能要强大得多。使用模块可以建立用户自己的函数、完成复杂的计算、替代宏所不能完成的功能等。,,,8.6.1,模块的基本概念,,模块是由过程组成的,过程是将,VBA,声明、语,,句集合在一起,作为一个命名单位的程序段;,,模块是过程的容器,所有,VBA,代码都以模块的,,方式保存在数据库中;,,模块中的每一个过程都可以由一个函数过程或,,一个子程序过程组成。,,,在,Access,中,模块有两种基本类型:类模块和标准模块。,,类模块:,Access,中的类模块可以独立存在,也可以与窗体

52、和报表同时出现。窗体和报表模块是类模块的典型例子,该类模块与某一窗体或报表相关联。窗体和报表模块通常都含有事件过程,该过程用于响应窗体或报表中的事件,可以使用事件过程来控制窗体或报表的行为,以及它们对用户操作的响应。,,标准模块包含的是通用过程,这些过程不与任何,Access,中的对象相关联,每一个过程都可以由一个个子程序过程或函数过程组成。,,,模块的组成,,模块由一个声明区域和一个或多个过程组成,,创建,VBA,模块与编程环境,,,Access,提供了一个编程界面,---VBE,,进入,VBE,编程环境,,,1.,创建类模块,,2.,创建标准模块,,8.6.2,创建新模块,,创建新模块的具

53、体操作步骤如下:,,(1),打开要建立模块的数据库,在,“,模块,”,选项卡中单击,“,新建,”,按钮,出现模块编辑窗口。,,(2),在模块编辑窗口中编辑模块代码。,,,2.,创建新过程,,在,VBA,中是用过程来实现程序模块的。将一个程序分成若干个相对独立的过程,每个过程可实现单一的功能。,,过程有,:,事件过程和通用过程,,S,ub,过程,(,子程序,),和,Function,过程,(,函数,),。,,,事件过程的格式,,,[,Private|Public][Static]Sub,,对象名,_,事件名,([,形参列表,]),,,<语句组>,,,End Sub,,事件有,:,,鼠标常用事件,

54、:,,(1) Click (2),DbClick,(3),MouseMove,,2.,窗体常用事件,:,,(1) Open (2) Active (3) Close,,关键字,Private,和,Public,中最多只能选其一;,,使用,Private,,,表示该过程是私有的局部过程,只能被该过程所在的窗体或标准模块中的其他过程所调用;,,使用,Public,,,表示该过程是公共的全局过程,可被应用程序中的任何窗体或任何标准模块中的过程所调用;,,关键字,Static,的作用是声明该过程中定义的变量均为静态局部变量。,[,Private|Public][Static,],Sub,

55、,子程序名,([,形参列表,]),,,语句组,1,,,[Exit Sub],,,[,语句组,2],,End Sub,(1)SUB,(子程序)过程的定义格式为:,,子程序体,强制退出子程序过程,,例,8-21 .sub,过程的定义与调用,,Private Sub pro1(),,Dim a As Integer, b As,Interger,,a=,InputBox,(“,请输入第一个数,:”): b=,InputBox,(“,请输入第二个数,:”),,Call,swap(a,b,),,,Debug.Print,,a;b,,Private Sub,swap(x,As Integer, y As

56、 Integer),,Dim t As Integer,,if x

57、括号括起,实参可直接加在子程序名后面,第二种形式:子程序名,[,实参列表,],,,swap,a,b,,例,8.22,按地址传递参数,,Private Sub pro2(),,Dim a As Integer, b As Integer, c as Integer,,a=1:b=3:c=5,,,Debug.Print,,a,b,c,,call pro3(a,b,c),,,Debug.Print,,a,b,c,,Private Sub pro3(Byval x As Integer, y As Integer, z as Integer),,x=2: y=4: z=6,,End Sub,,值传

58、递,:,,调用前,,调用 在,pro3(),过程中 调用结束返回后,,a=1 a=1,,x=1 a=1,x=2 a=1,,,通过地址传输数据的过程,:,,调用前,,调用 在,pro3(),过程中 调用结束返回后,,b=3 b= b= b=,,y y,,c=5 c=

59、 c= c=,,z,z z,3,5,4,6,4,6,,,(2) Function,过程(函数过程),,在解决实际问题时,如果没有现成的函数的函数可用时,我们可以自定义函数过程。函数过程同,Sub,过程一样也是由一段独立的代码组成,可以被某个过程多次调用;,,,,[Private|Public][Static],,Function,函数名,,,[(,形参列表,)][As,类型,],,,语句组,1,,,函数名,=,函数返回结果,,,,Exit Functio

60、n,,End Function,定义函数过程的一般格式,函数体,在函数体内至少,,对函数名赋值一次,,例,(8-24):,运行窗体,,,根据在文本框中输入的数,,,判断并显示该数是奇数还是偶数,,Private Sub Command3_Click(),,Dim n As Long, m As String,,n = Val(Me!Text1),,m =,IIf(f(n,), ",偶数,", ",奇数,"),,,MsgBox,n & ",是," & m,,End Sub,,,,Private Function,f(x,As Long) As Boolean,,If x Mod 2 = 0 Th

61、en,,f = True,,Else,,f = False,,End If,,End,Function,,(1),函数过程名有值,有类型,在函数体内至少赋值一次;子过程名无值,无类型,在子过程体内不能对子过程名赋值;,,(2),调用时,子过程调用是一句独立的语句。,,函数过程不能作为单独的语句加以调用,必须参与表达式运算。,,(3),一般当过程有一个函数值,使用函数过程较直观;反之若过程无返回值,或有多个返回值,使用子过程较直观。,子过程与函数过程区别,,,8.6.3,变量的作用域,,,一个,VBA,应用程序可以包含若干个过程,这些过程可以出现在窗体或标准模块中,而且在过程中必不可少的要使用变

62、量。变量在程序中所处的位置不同,其使用的范围也不同,我们将变量的有效范围称为变量的作用域。,变量按其作用域分为局部变量、模块级变量和全局变量。,,局部变量:,在过程内用声明的变量,只能在本过程中使用。,,窗体,/,模块级变量:,在,“,通用声明,”,段中用,Dim,语句或用,Private,语句 声明的变量,,,可被本窗体,/,模块的任何过程访问。,,全局变量:,在,“,通用声明,”,段中用,Public,语句声明的变量,可被本应用程序的任何过程或函数访问,。,,例如:在一个标准模块中不同级别的变量声明:,,,Public Pa As integer,',全局变量,,,Private Mb

63、As string,',窗体,/,模块级变量,,,Sub F1( ),,,Dim,Fa,As integer,',局部变量,,,…,,End Sub,,,Sub F2( ),,,Dim,Fb,As Single,',局部变量,,,…,,,End Sub,,,8.6.4,程序的调试,,程序代码颜色说明,,从代码窗口中可以看到,程序代码中每一行的每一个单词都具有自己的颜色,这样用户可以从复杂的代码中轻松地辨别出程序的各个部分。代码行中各种颜色所代表的含义如下:,,绿色,:表示注释行,它不会被执行,只用于对代码进行说明;,,蓝色,:表示,VBA,预定义的关键字名;,,黑色:表示存储数值的内容,如赋值语句,变量名;,,红色,:表示有语法错误的语句。,,,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!