




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
回顾VBE编程环境面向对象程序设计概念数据库对象VBA中的基本数据类型常量、变量、数组⑴了解VBA的作用及Access的VBE开发环境。⑵掌握VBA的基本数据类型、运算符及常用函数的用法。⑶掌握三种基本程序控制结构。⑷掌握VBA的模块与过程的概念和用法,掌握过程的参数传递方式。⑸了解DoCmd对象的基本功能。本章教学目的目录模块与过程Lesson03VBA编程基础Lesson02VBA程序设计基础Lesson01DoCmd对象Lesson04目录VBA编程基础Lesson028.2.6数据库对象变量在Access2003数据库中建立的对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用,与普通变量不同的是要使用规定的引用格式。例如,窗体和报表对象的引用格式为: Forms(或Reports)!窗体(或报表)名称!控件名称[.属性名称]关键字Forms或Reports分别指示窗体或报表对象类;感叹号(!)为分隔符,用于分隔开父子对象;“属性名称”为可选项,若省略,则默认为控件的基本属性Value。注意:如果对象名称中含有空格或标点符号,引用时要用方括号把对象名称括起来。8.2.7运算符与表达式 和其他语言一样,VBA也提供丰富的运算符,通过运算符与操作数组合成表达式,完成各种形式的运算和处理。1.运算符 运算符是表示实现某种运算的符号,根据运算的不同,VBA中的运算符可分为:算术运算符、字符串运算符、关系运算符和逻辑运算符。(1)算术运算符 算术运算符是常用的运算符,用来执行简单的算术运算。VBA提供了8个算术运算符,指数运算(^)用来求一个数字的某次方。在运用乘方运算符时,只有当指数为整数值时,底数才可以为负数。整数除法(\)运算符用来对两个操作数作除法并返回一个整数。整除的操作数一般为整型值,操作数必须在(-2147483648.5,214748367.5)范围内。当操作数带有小数时,首先被四舍五入为整型数或长整型数,然后进行整除运算;如果运算结果有小数,系统将截断为整型数(Integer)或长整数(Long),不再进行舍入处理。取模(Mod)运算符用来对两个操作数作除法并返回余数。如果操作数有小数,系统会四舍五入变成整数后再运算。如果被除数是负数,余数也取负数;反之,如果被除数是正数,余数则为正数。算术运算符两边的操作数应是数值型,若是数字字符或逻辑型,系统自动转换成数值类型后再运算。(2)字符串运算符 字符串运算就是将两个字符串连接起来生成一个新的字符串。字符串运算符包括:&和+。①&运算符:用来强制两个表达式作字符串连接。 需要注意的是:由于符号“&”还是长整型的类型定义符,在字符串变量后使用运算符“&”时,变量与运算符“&”之间还应加一个空格。 运算符“&”两边的操作数可以是字符型,也可以是数值型。不管是字符型还是数值型,进行连接操作前,系统先进行操作数类型的转换,数值型转换成字符型,然后再做连接运算。②+运算符:用来连接两个字符串表达式,形成一个新的字符串。 注意:“+”运算符要求两边的操作数都是字符串。如果两边都是数值表达式时,就做普通的算术加法运算;若一个是数字型字符串,另一个为数值型,则系统自动将数值型字符串转化为数值,然后进行算术加法运算;若一个为非数值型字符串,另一个为数值型,则出错。计算以下表达式的值2^82^(1/2)7/27\210Mod410Mod-4-10Mod-4-10Mod4-8.8Mod520-True20+False+6"abc""abc"&"是小写英文字母""abc"&123"abc"&"123""abc"&123"2+3"&"="&(2+3)"1111"+2222"1111"+"2222""abcd"+12124321+"1234"&100举例:在立即窗口输入?2^8
既能看到计算结果(3)关系运算符运算符含义实例结果=等于“abcd”=”abc”False>大于“abcd”>”abc”True>=大于等于“bacd”>=”abce”False<小于“41”<”5”True<=小于等于41<=5False<>不等于“abc”<>”ABC”TrueIs对象引用比较Like字符串匹配“abc”Like”*c*”TrueBetween…and关系运算符也叫比较运算符,用来对两个表达式的值进行比较,比较的结果是一个逻辑值,即真(True)或假(False)。在使用关系运算符进行比较时,应注意以下规则:.如果参与比较的操作数均是数值型,则按其大小进行比较。.如果参与比较的操作数均是字符型,则按字符的ASCⅡ码从左到右一一对应比较,即首先比较两个字符串的第一个字符,ASCⅡ码大的字符串大。如果两个字符串的第一个字符相同,则比较第二个字符串,以此类推,直到出现不同的字符为止。.汉字字符大于西文字符。汉字按区位码顺序进行比较。(4)逻辑运算符逻辑运算也称布尔运算,除Not是单目运算符外,其余均是双目运算符。由逻辑运算符连接两个或多个关系式,对操作数进行逻辑运算,结果是逻辑值True或False。2.对象运算符对象运算符有“!”和“.”两种,使用对象运算符指示随后将出现的项目类型。①!运算符“!”运算符的作用是指出随后为用户定义的内容。使用“!”运算符可以引用一个开启的窗体、报表或开启窗体或报表上的控件。表8.8列出了3种引用方式。②.运算符
“.”运算符通常指出随后为Access定义的内容。例如,使用“.”运算符可引用窗体、报表或控件等对象的属性,引用格式为:[控件对象名].[属性名]。 在实际应用中,“.”运算符与“!”运算符配合使用,用于标识引用的一个对象或对象的属性。 例如,可以引用或设置一个打开窗体的某个控件的属性。 Forms![学生信息]![Command1].Enabled=False 该语句用于标识“学生信息”窗体上的“Command1”控件的“Enabled”属性并设置其值为“False”。需要注意的是:如“学生信息”窗体为当前操作对象,Forms![学生信息]可以用“Me”来替代。 例如:Me!Command2.Enabled=False3.表达式(1)表达式的组成表达式由常量、变量、运算符、函数和括号等按一定的规则组成,表达式通过运算得出结果,运算结果的类型由操作数的数据和运算符共同决定。在VBA中,逻辑量在表达式中进行算术运算时,True值被当成-1,False值被当成0来处理。(2)表达式的书写规则.只能使用圆括号且必须成对出现。.乘号不能省略。A乘以B应写成A*B,而不是AB。.表达式从左至右书在同一基准上书写,无高低、大小写区分。3.表达式(3)算术运算表达式的结果类型在算术运算表达式中,参与运算的操作数可能具有不同的数据精度,VBA规定运算结果的数据类型采用精度高的数据类型。3.表达式(4)运算优先级 如果一个表达式中含有多种不同类型的运算符,运算进行的先后顺序由运算符的优先级决定。不同类型运算符的优先级为:
算术运算符>字符运算符>关系运算符>逻辑运算符 圆括号优先级最高,在具体应用中,对于多种运算符并存的表达式,可以通过使用圆括号来改变运算优先级,使表达式更清晰易懂。 表达式是Access2003数据库应用设计的重要组成部分。在Access2003的许多操作中都需要使用表达式,例如,创建计算控件、查询与筛选准则、有效性规则、宏的条件或模块代码语句。熟练掌握和正确使用表达式是程序设计的基础。8.2.8函数 函数也是设计表达式经常使用的操作数的一种,有的也能和语句一起使用。在VBA中,除模块创建过程中可以定义子过程和函数过程完成特定功能外,又提供了近百个内置的标准函数,在设计数据库时可以直接引用这些函数。 函数的主要特点是,具有参数(也有少量函数不需要参数)并返回值。其使用形式为:.
函数名(<参数1><,参数2>[,参数3][,参数4]…) 其中,参数可以是常量、变量或表达式,可以有一个或多个。每个函数被调用时,都会有一个返回值,需特别说明的是:根据函数的不同,参数与返回值都有特定的数据类型与之对应。 内置函数按其功能可分为数学函数、转换函数、字符串函数、日期函数和格式输出函数,以下将分类介绍一些常用标准函数的使用方法。1.数学函数在三角函数中,数值表达式的值是以弧度为单位的角度值。开平方函数中,数值表达式的值不能为负数。在随机数函数中,数值表达式参数为随机数种子,决定产生随机数的方式。数值表达式<0,每次产生相同的随机数。数值表达式=0,产生最近生成的随机数,生成的随机数序列相同。数值表达式>0,每次产生新的随机数。如果省略数值表达式参数,则系统默认参数值大于0。为在每次运行时,产生不同序列的随机数,可先使用无参数的Randomize语句初始化随机数生成器,用系统计时器返回的值作为新的种子值。举例:双色球2.转换函数说明:Str()函数将非负数值转换成字符类型后,会在转换后的字符串左边增加一个空格,表示有一正号。Val()函数将数字字符串转换为数值类型,在转换时会自动将字符串中的空格、制表符和换行符去掉,当遇到系统不能识别为数字的第一个字符时,系统停止转换,返回已转换的结果。3.字符串函数
4.日期/时间函数5.格式输出函数 格式输出函数的作用是:使数值、日期或字符串按指定的格式输出(显示或打印),一般用于Print方法中,这里主要介绍Format()函数。 函数格式:Format(表达式[,格式符]) 其中:表达式为要格式化的数值、日期或字符串表达式。格式符指定格式的符号代码,在使用时要加引号。格式符分为3类:数值格式符、日期格式符和字符串格式符。例题8-13创建一个窗体,添加两个名为lbe1和lbe2的标签控件,在按钮的Click事件中,通过使用Format()和Now()函数,格式化显示当前系统时钟日期时间。PrivateSubCommand2_Click()Me.Caption=NowMe.Label0.Caption=Format(Now,"dddddd")Me.Label1.Caption=Format(Now,"ttttt")EndSub6.其他常用函数(1)InputBox()函数 用于VBA与用户之间的人机交互。InputBox()函数打开一个对话框,显示相应提示信息并等待用户输入内容,当用户在文本框中输入内容并按“确定”按钮或按Enter键时,函数返回输入的内容,其值的类型为字符串。 在VBA中可以函数的形式调用使用,格式为: InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])例如,使用下面的调用语句可打开如图8.12所示的输入对话框。strx=InputBox("请输入内容:","输入对话框","ABC",5000,4000,"使用说明",1)(2)Msgbox()函数与Msgbox过程 Msgbox用于打开一个信息框,等待用户单击按钮并返回一整数值,告诉系统用户单击了哪一个按钮,若不需要返回值,可直接作为命令语句使用,显示提示信息。 在VBA中可以函数的形式调用,格式为: Msgbox(prompt[,buttons][,title][,helpfile,context])参数说明:buttons(按钮):可选参数,指定在信息框中显示按钮的数目和形式、图标式样、默认按钮及信息框的强制回应。如果省略,系统默认buttons的值为0。 按钮的数目设置:可以使用内部常数或数字(1~5),设定值与按钮的数目的对应关系如下表例如,使用如下语句调用Msgbox函数:intx=Msgbox("提示信息:",1+Vbquestion+Vbdefaultbutton1,"标题信息")运行结果如图8.13所示。8.2.9程序语句 VBA中的语句是能够完成某项操作的一条完整命令,程序由大量的命令语句构成。命令语句可以包含关键字、函数、运算符、变量、常数以及表达式。
VBA语句一般分为3种类型: (1)声明语句:用来为变量、常量、程序或过程命名,指定数据类型。 (2)赋值语句:用来为变量指定一个值或表达式。 (3)执行语句:用来调用过程、执行一个方法或函数,可以循环或从代码块中分支执行,实现各种流程控制。1.程序语句书写规则 同任何程序设计语言一样,VBA代码语句也有一定的书写规则。 (1)不区分字母的大小 在VBA代码语句中,不区分字母的大小写,但要求标点符号和括号等要用西文格式。 语句中的关键字,首字母均转换成大写,其余字母转换成小写。 对用户自定义的变量和过程名,VBA以第一次定义的格式为准,以后引用输入时自动向首次定义的转换。(2)语句书写规定 通常将一条语句写在一行,若语句较长,一行写不下时,可在要续行的行尾加上续行符(空格+下划线“_”),在下一行续写语句代码。 在同一行上可以书写多条语句,语句间用冒号“:”分隔,一行允许多达255个字符。 输入一行语句并按Enter键,VBA会自动进行语法检查,如果语句存在错误,该行代码将以红色显示(或伴有错误信息提示)。(3)注释语句在应用系统开发中,为便于程序的调试与维护,应使用注释语句。a)使用Rem语句Rem语句在程序中作为单独一行语句,使用格式为:Rem注释内容。Rem语句多用于注释其后的一段程序。b)使用西文单引号可使用单引号“'”引导注释内容,使用格式为:'
注释内容。用单引号引导的注释可以直接出现在一行语句的后面。单引号引导的注释多用于一条语句。例如,定义变量并赋值。Rem定义2个Variant型变量DimStr1,Str2Str1="学生基本信息报表"'该变量用于学生基本信息报表表头Str2="制表单位:××大学":Rem该变量用于学生基本信息报表页脚2.声明语句 通过声明语句可以命名和定义过程、变量、数组或常量。当声明一个过程、变量或数组时,也同时定义了它们的作用范围,此范围取决于声明位置(子过程、模块或全局)和使用什么关键字(Dim、Public、Static或Global等)来声明它。 例如,有如下程序段: SubMyproc() DimSinSasSingle,SinRasSingle ConstP=3.14159
…… EndSub 上述语句声明定义了一个名为Myproc的子过程,Dim语句定义了2个名称分别为SinS和SinR的单精度数据变量,Const语句定义了1个名为P的符号常量。当这个子过程被调用或运行时,所有包含在Sub和EndSub之间的语句都会被执行。3.赋值语句 赋值语句用于指定一个值或表达式给变量或常量。使用格式为: [Let]变量名=值或表达式 其中:Let为可选项,在使用赋值语句时,一般省略。 例如: DimSinSasSingle,SinRasSingle SinS=1234.567 LetSinR=12.3关于使用赋值语句的说明:(1)当数值表达式与变量精度不同时,系统强制转换成变量的精度。例如:DimIntNasIntegerIntN=10.6'IntN为整型变量,10.6经四舍五入转换后赋值,IntN值为11(2)当表达式是数字字符串,变量为数值型,系统自动转换成数值类型再赋值,若表达式含有非数字字符或空串时,赋值出错。例如:IntN="123" 'IntN值为123IntN="1a23" '出错,类型不匹配(3)不能在一个赋值语句中,同时给多个变量赋值。 例如:以下语句语法没有错误,但结果不正确: x=y=z=10(4)实现累加作用的赋值语句。 例如: n=n+1'取变量n中的值加1后再赋给n,与循环语句结合,可实现计数 说明:
还有一个赋值语句是Set语句,它用来指定一个对象给已声明为对象类型的变量,Set关键字不能省略。如:seta=Me![控件名称]5.执行语句 执行语句是程序的主体,程序功能靠执行语句来实现。语句的执行方式按流程可以分为顺序结构、条件判断结构和循环结构三种。顺序结构:按照语句的逻辑顺序依次执行,如赋值语句。条件判断结构:又称选择结构,根据条件是否成立选择语句执行路径。循环结构:可重复执行某一段程序语句。(1)If条件语句在VBA代码中使用If条件语句,可根据条件表达式的值来选择程序执行哪些语句。If条件语句的主要格式有:单分支、双分支和多分支等。单分支结构语句格式为:If<条件表达式>Then<语句>或If<条件表达式>Then <语句块>EndIf功能:当条件表达式为真时,执行Then后面的语句块或语句,否则不做任何操作。说明:语句块可以是一条或多条语句。在使用右边的单行简单格式时,Then后只能是一条语句,或者是多条语句用冒号分隔,但必须与If语句在一行上。单分支结构语句PrivateSubToggle0_Click() a=Val(InputBox("输入a的值")) b=1 Ifa<>0Thenb=2 Text1.Value=bEndSub
在窗体的文本框TEXT5中输入密码“123456”,如果正确则打开“主切换面板”窗体,否则,弹出信息框,提示“密码错误,请重新输入”,如果单击“确定”按钮,将密码框消除干净,重新输入密码。举例:IF分支语句双分支结构语句格式为:If<条件表达式>Then语句1else语句2或If<条件表达式>Then <语句块1>Else <语句块2>EndIf功能:当条件表达式为真时,执行Then后面的语句块1或语句1,否则执行Else后面的语句块2或语句2。例题8-14编写计算x的平方根(x>=0时),x的绝对值(x<0时),函数的程序语句。Ifx>=0Then
y=sqr(x)Else
y=abs(x)EndIf多分支结构语句格式为:If<条件表达式1>Then <语句块1>ElseIf<条件表达式2>Then <语句块2>[Else<语句块n+1>]EndIf功能:依次测试条件表达式1、条件表达式2、……,当遇到条件表达式为真时,则执行该条件下的语句块。如均不为真,若有Else选项,则执行Else后的语句块,否则执行EndIf后面的语句。例题8-15用窗体实现如下操作:当输入某同学期末考试科目的总成绩时,显示该生对应的五级制总评结果。说明:ElseIf中不能有空格。不管条件分支有几个,程序执行了一个分支后,其余分支不再执行。当有多个条件表达式同时为真时,只执行第一个与之匹配的语句块。因此,应注意多分支结构中条件表达式的次序及相交性。If语句的嵌套使用:If或Else后面的语句块中又包含有If语句。例如:If<条件表达式1>Then <语句块1> If<条件表达式11>Then <语句块11> EndIf …EndIf例题8-16比较3个数值变量x,y和z的值,通过交换,使得x>y>z。Ifx<yThen t=x:x=y:y=tEndIfIfy<zThen t=y:y=z:z=t Ifx<yThen t=x:x=y:y=t EndIfEndIf注意:嵌套If语句应注意书写格式,为提高程序的可读性,多采用锯齿型。注意If与EndIf的配对。多个If嵌套,EndIf与它最近的If配对。(2)多分支SelectCase语句当条件选项较多时,使用If语句嵌套来实现,程序的结构会变得很复杂,不利于程序的阅读与调试,此时,用SelectCase语句会使程序结构更清晰。SelectCase语句格式为:SelectCase变量或表达式 Case表达式1 <语句块1> Case表达式2 <语句块2>
… [CaseElse <语句块n+1>]EndSelect功能:Select语句首先计算SelectCase后<变量或表达式>的值,然后依次计算每个Case子句中表达式的值,如果<变量或表达式>的值满足某个Case值,则执行相应的语句块,如果当前Case值不满足,则进行下一个Case语句的判断。当所有Case语句都不满足时,执行CaseElse子句。如果条件表达式满足多个Case语句,则只有第一个Case语句执行。说明:“变量或表达式”可以是数值型或字符串表达式。Case表达式与“变量或表达式”的类型必须相同。Case表达式可以是下列几种格式:①单一数值或一行并列的数值,之间用逗号分开。②用关键字To分隔开的两个数值或表达式之间的范围,前一个值必须比后一个值要小。字符串的比较是从它们的第一个字符的ASCII码值开始比较的,直到分出大小为止。③用Is关系运算符表达式。【例8-17】用selectcase语句改写例8-15的代码。SelectCaseVal(Me!Zpcj)CaseIs>=90Me!Zpjg="优秀"Case80,81,82To89Me!Zpjg="良好"Case70To79Me!Zpjg="中等"Case60To69Me!Zpjg="及格"CaseElseMe!Zpjg="不及格"EndSelect(3)循环语句For…Next循环语句用于循环次数已知的循环操作。语句格式为:For循环变量=初值To终值[step步长值]<语句块>[ExitFor]<语句块>Next循环变量功能:①循环变量先被赋初值。②判断循环变量是否在终值内,如果是,执行循环体,然后循环变量加步长值继续;如果否,结束循环,执行Next后的语句。说明:①循环变量必须为数值型。②step步长值:可选参数。如果没有指定,则step的步长值默认为1。注意:步长值可以是任意的正数或负数。一般为正数,初值应小于等于终值;若为负数,初值应大于等于终值;步长值不能为0。编写程序,把输入的10个整数按逆序输出PrivateSubCommand3_Click()Dima(10)AsInteger'定义存放10个整数的数组
DimiAsInteger'定义循环变量
Fori=1To10a(i)=InputBox("请输入一个整数")'输入整数
NextiFori=1To10Label1.Caption=Label1.Caption&a(i)&""'将输入的10个整数按照输入顺序在标签Label1中显示
NextiFori=10To1Step-1Label2.Caption=Label2.Caption&a(i)&""'将输入的10个整数按照输入逆序在标签Label1中显示
NextiEndSub【例】从键盘上输入10个整数,把这些数按由小到大的顺序排序输出。排序的方法很多,如选择法、冒泡法等。这里介绍最容易理解的“冒泡法”。设10个数存放在A数组中,分别为:A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。第1轮:先将A(1)与A(2)比较,若A(1)>A(2),则将A(1)、A(2)的值互换,否则,不作交换;这样处理后,A(1)一定是A(1)、A(2)中的较小者。再将A(1)分别与A(3)、…、A(10)比较,并且依次作出同样的处理。最后,10个数中的最小者放入了A(1)中。第2轮:将A(2)分别与A(3)、…、A(10)比较,并依次作出同第1轮一样的处理。最后,第1轮余下的9个数中的最小者放入A(2)中,亦即A(2)是10个数中的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度网络安全就业协议书协议内容详尽规范
- 二零二五年度股权投资公司股东合作协议
- 2025年度软装行业市场监测与风险评估合同
- 二零二五年度广东省房屋租赁合同租赁保险合作协议
- 二零二五年度娱乐产业动漫IP授权使用劳动合同
- 二零二五年度店铺转让定金及品牌授权使用合同
- 二零二五年度商业空间合租租赁及税务咨询合同
- 二零二五年度旅游度假村装修合同终止书
- 2025年度防火门市场调研与销售预测合同
- 二零二五年度影视特效艺术家专属签约合同
- 特许经营管理手册范本(餐饮)
- 一年级教师工作总结
- 2023年四川省绵阳市中考语文试卷真题(含答案)
- 用车申请表格
- 王阳明与心学
- 宾馆消防监督每日巡查情况记录表
- 标准检验指导书(SIP)-(格式模板)
- 2023年黑龙江放射医学技术中级考试试卷
- 玄武岩职业卫生控评
- 酒店人力资源管理实务课件
- 中华八大菜系-川菜课件
评论
0/150
提交评论