《Access数据库基础及应用教程》课件-第8章 编程工具VBA和模块_第1页
《Access数据库基础及应用教程》课件-第8章 编程工具VBA和模块_第2页
《Access数据库基础及应用教程》课件-第8章 编程工具VBA和模块_第3页
《Access数据库基础及应用教程》课件-第8章 编程工具VBA和模块_第4页
《Access数据库基础及应用教程》课件-第8章 编程工具VBA和模块_第5页
已阅读5页,还剩95页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章

编程工具VBA和模块Access数据库基础及应用教程(第4版)Access数据库基础及应用第8章编程工具VBA和模块教学知识点面向对象程序设计的基本概念VBA编程环境和编程基础VBA程序流程控制常用对象的属性和事件模块的概念和创建参数传递变量的作用域程序调试和错误处理

Access数据库基础及应用8.1VBA概述

8.1.1什么是VBA

VBA是一种应用程序开发工具,是基于VB(VisualBasic)发展而来的。微软将VB引入Office软件中用于开发应用程序,这种集成在Office中的VB被称为VBA。使用VBA编写的程序保存在Access数据库文件中,无法脱离Access应用程序环境而独立运行。Access数据库基础及应用

8.1.2宏和VBA

宏本身是一种控制方式简单的程序。宏只可以使用Access提供的命令,而VBA则需要开发者自行编写程序代码。宏和VBA都可以实现操作的自动化。但下面几种情况应该使用VBA:使数据库易于维护

创建自己的函数显示错误消息创建或操作对象执行系统级别的操作一次操作多个记录。将参数传送给VBA过程

Access数据库基础及应用

8.1.3将宏转化为模块

宏对象的执行效率较低,可以将宏对象转换为VBA程序模块,以提高代码的执行效率。将宏转化为模块的操作步骤如下:

1)在“任务窗格”中选择需要转换的宏对象。

2)单击“文件”选项卡,然后单击“对象另存为”,在打开的“另存为”对话框中,为VBA模块命名,并指定保存类型为“模块”。

Access数据库基础及应用8.2VBA编程的基本概念与步骤

8.2.1对象、属性、方法和事件

1.对象和对象名称

对象好比是积木块,是VBA应用程序的基础构件。为便于识别,每个对象均有名称,称为对象名称。有效的名称须符合Access的标准命名规则。

2.对象的属性

属性用于描述对象特征,是对客观世界实体性质的抽象。

3.对象的方法

方法是对象所能执行的操作。

VBA中的方法是由过程或函数组成。

Access数据库基础及应用4.对象的事件和事件过程

VBA中事件是预先定义好的,能够被对象识别的动作,如单击(Click)事件、双击(DblClick)事件、装载(Load)事件、鼠标移动(MouseMove)事件等。每个对象都有与之对应的一组事件集合,每个对象的事件集合的内容是不完全相同的。如Click事件,当命令按钮对象识别出作用在其上的“单击鼠标”事件后,立即对该事件做出反应,其反应就是执行一段代码实现某一特定的功能,这段程序代码就是用户编写的“事件过程”。

Access数据库基础及应用4.对象的事件和事件过程对象的事件是固定的,用户不能建立新的事件。当事件由用户触发(如单击)或由系统触发(如装载)时,对象就会对该事件做出响应,响应某个事件后所执行的程序代码就是事件过程。一个对象可以响应一个或多个事件,因此可以使用一个或多个事件过程对用户或系统的触发做出响应。用户只需编写必须响应的事件过程。事件过程的一般编写格式为:PrivateSub对象名_事件名([参数表])

事件过程代码EndSub

8.2.2VBA编程步骤

(1)创建用户界面

(2)设置对象属性

(3)对象事件过程的编写

(4)运行和调试

(5)保存窗体

Access数据库基础及应用例8-1新建一个窗体如下图所示。单击“显示”按钮,将在文本框中显示“欢迎进入教学管理系统”,单击“清除”按钮则可清除文本框中的文字。操作演示Access数据库基础及应用8.3VBA编程环境

8.3.1进入VBE界面

1.

从数据库窗口中打开VBE

(1)方法一

(2)方法二

(3)方法三

(4)方法四Access数据库基础及应用

2.从报表或窗体的设计视图中打开VBE

(1)方法一

(2)方法二

(3)方法三

8.3.2VBE界面

1.VBE工具栏

VBE界面包括“编辑”、“标准”、“调试”、“用户窗体”、“自定义”工具栏。

2.VBE窗口Access数据库基础及应用图1VBE窗口Access数据库基础及应用立即窗口工程资源管理器属性窗口监视窗口本地窗口代码窗口

(1)代码窗口代码窗口用来编写、显示以及编辑VBA代码。

(2)立即窗口使用立即窗口可以输入或粘贴一行代码并执行该代码。

(3)本地窗口使用本地窗口,可以自动显示正在运行过程中的所有变量声明及变量值,从中可以观察一些数据信息。

(4)监视窗口在调试VBA程序时,可以利用监视窗口显示正在运行过程定义的监视表达式的值。

Access数据库基础及应用

(5)工程资源窗口工程资源管理器以分层列表的方式显示当前数据库中的所有模块。

(6)属性窗口属性窗口列出了选定对象的属性,可以在设计时查看、改变这些属性。8.4VBA程序设计基础

8.4.1VBA的基本数据类型

Access数据库基础及应用表1VBA数据类型数据类型关键字符号存储空间取值范围默认值字节型Byte1字节0~2550整型Integer%2字节-32768~327670逻辑型Boolean2字节True或FalseFalse长整型Long&4字节-2147483648~21474836470单精度型Single!4字节负数:-3.402823E38~-1.401298E-45正数:1.401298E-45~3.402823E380双精度型Double#8字节负数:-1.79769313486232E308~-4.94065645841247E-324正数:-4.94065645841247E-324~1.79769313486232E3080货币型Currency@8字节-922337203685477.5808~922337203685477.58070字符型String$与字符串长度有关0~65535个字符〝〞日期/时间型Date8字节日期:100年1月1日~9999年12月31日时间:00:00:00~23:59:590变体型Variant根据需要对象型Object4字节EmptyAccess数据库基础及应用

1.数值类型

(1)Integer和Long型用于保存整数。

(2)Single和Double型用于保存浮点数。

(3)Currency型用于保存货币数据,是为表示钱款而设置的。

(4)Byte型用于保存二进制数据,以一个字节的无符号的数值形式存储。

Access数据库基础及应用

2.字符类型

字符型用于存放字符串。字符串包括除双引号和Enter键以外可打印的所有字符,双引号作为字符串的定界符号。

3.逻辑类型

逻辑型数据用于逻辑判断,亦称布尔型。其值只有两个:逻辑真True和逻辑假False。

4.日期/时间类型

字面上可被认作日期和时间的字符,只要用“#”括起来,都可以作为日期/时间型数据。

5.变体类型

它的类型可以是前面叙述的数值型、日期型、字符型等,完全取决于程序的需要。

Access数据库基础及应用

8.4.2常量和变量

1.常量

(1)常量的概念常量是指在程序运行过程中,其值不能被改变的量。

(2)常量的类型常量有直接常量、符号常量、固有常量和系统定义常量。

2.变量

(1)变量的概念变量是指在程序运行过程中值会发生变化的量。Access数据库基础及应用

(2)变量的命名规则

(3)变量的声明

1)显式声明

2)隐式声明

8.4.3运算符和表达式

1.算术运算符

用来执行简单的算术运算。运算符有:^(乘方)、-(负号)、﹡(乘)、/(除)、\(整除)、Mod(取模)、+(加)、-(减)Access数据库基础及应用

2.

字符串运算符

字符串运算符执行将两个字符串连接起来生成一个新的字符串的运算。字符串运算符有两个:“&”和“+”。

3.关系运算符

关系运算符的作用是对两个表达式的值进行比较,比较的结果是一个逻辑值,即真(True)或假(False)。关系运算符有:>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、=(等于)、<>(不等于)。

4.逻辑运算符

由逻辑运算符连接两个或多个关系式,对操作数进行逻辑运算,结果是逻辑值True或False。Access数据库基础及应用

逻辑运算符有:Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(等价)、Imp(蕴含)。

5.对象运算符

使用对象运算符指示随后将出现的项目类型。

(1)“!”运算符

“!”运算符的作用是指出随后为用户定义的内容。

(2)“.”运算符

“.”运算符通常指出随后为Access定义的内容。

Access数据库基础及应用

6.表达式

(1)表达式的组成表达式由常量、变量、运算符、函数等按一定的规则组成。

(2)表达式的书写规则

(3)运算优先级不同类型运算符的优先级为:算术运算符>字符运算符>关系运算符>逻辑运算符Access数据库基础及应用

8.4.4VBA常用语句

1.

语句的书写规则

(1)在VBA代码语句中,不区分字母的大小写,但要求标点符号和括号等要用西文格式。

(2)通常将一条语句写在一行,若语句过长,可以采用断行的方式,用续行符将长语句分成多行。

(3)VBA允许在同一行上可以书写多条语句,语句间用冒号“:”分隔,一行允许多达255个字符。

(4)一行命令输完后按Enter键结束,VBA会自动进行语法检查。Access数据库基础及应用

2.

注释语句

(1)使用Rem语句

格式:Rem注释内容

Rem语句多用于注释其后的一段程序。

(2)使用西文单引号“'”

格式:'注释内容

单引号引导的注释多用于一条语句。

3.赋值语句

(1)语句格式

[Let]变量名=表达式

(2)语句作用将右边表达式的值赋给左边的变量。

Access数据库基础及应用

(3)参数说明

·Let为可选项,在使用赋值语句时,一般省略。

·

赋值语句左右两端类型要求相同。

·

赋值号“=”不等同于等号。

·

如果变量未被赋值而直接引用,则数值型变量的值为0,字符型变量的值为空串〝〞逻辑型变量的值为False。

(4)使用说明

4.用户交互函数InputBox

(1)函数格式

InputBox[$](提示[,标题][,缺省][,x坐标位置][,y坐标位置])Access数据库基础及应用

(2)函数作用用于VBA与用户之间的人机交互。

(3)参数说明

5.MsgBox函数和MsgBox语句

(1)MsgBox函数和MsgBox语句格式

MsgBox函数格式为:

变量名[%]=MsgBox(提示[,按钮][,标题])

MsgBox语句格式为:

MsgBox提示[,按钮][,标题](2)MsgBox的作用

Access数据库基础及应用

用于打开一个信息框,等待用户单击按钮,并返回一个整数值来确定用户单击了哪一个按钮,从而采取相应的操作。

(3)参数说明8.5VBA程序流程控制

8.5.1顺序结构

顺序结构是最常用、最简单的结构,是进行复杂程序设计的基础,其特点是各语句按各自出现的先后顺序依次执行。

例8-2在“教学管理”数据库中,创建一个模块,在其中创建一个welcome过程,以根据输入的人名,弹出消息框表示欢迎。

Access数据库基础及应用

8.5.2分支结构(选择结构)

1.单分支结构

(1)语句格式

If条件表达式Then

语句块

EndIf

或If条件表达式Then语句块

(2)功能当条件表达式为真时,执行Then后面的语句块或语句,否则不做任何操作。

(3)说明

·

语句块可以是一条或多条语句。

·

上面的格式,If和EndIf必须配对。下面的单行简单格式,Then后只能是一条语句或是多条语句用冒号分隔,但必须与If语句在同一行。Access数据库基础及应用

例8-3比较两个数值变量x和y的值,用x保存大的值,y保存小的值。

提示:引入中间变量,用于实现x与y值的交换。Access数据库基础及应用操作演示

2.双分支结构

(1)语句格式

If条件表达式Then

语句块1Else

语句块2EndIf

或If条件表达式Then语句1Else语句2(2)功能当条件表达式的结果为真时,执行Then后面的语句块1或语句1,否则执行Else后面的语句块2或语句2。Access数据库基础及应用

Access数据库基础及应用操作演示例8-4编写一个模块,根据输入的成绩,给出“及格”与“不及格”的提示。提示:使用Sub()…EndSub将该程序定义为一个过程,过程名为“stumark”。运行后结果如图:3.多分支结构

(1)If语句格式:

If条件表达式1Then

语句块1ElseIf条件表达式2Then

语句块2…[Else

语句块n+1]EndIf

Access数据库基础及应用例8-5输入一个学生的一门课程的分数x(百分制),显示该生对应的评定结果。要求:当x≥90时,输出“优秀”;当80≤x<90时,输出“良好”;当70≤x<80时,输出“中等”;当60≤x<70时,输出“及格”,当x<60时,输出“不及格”。窗体设计界面如图所示:操作演示Access数据库基础及应用(2)SelectCase语句

SelectCase变量或表达式

Case表达式1

语句块1Case表达式2

语句块2

…Case表达式n

语句块n[CaseElse

语句块n+1]EndSelect

例8-6把例8-4中的程序代码用selectCase情况语句改写。Access数据库基础及应用8.5.3循环结构

1.For循环语句

(1)语句格式For循环变量=初值To终值[Step步长]

语句块1[ExitFor]

语句块2Next[循环变量]Access数据库基础及应用

(2)执行过程

1)将初值赋给循环变量。

2)判断循环变量的值是否超过终值。

3)如果循环变量的值超过终值,则跳出循环;否则继续执行循环体

4)在执行完循环体后,将循环变量的值加上步长赋给循环变量,再返回第二步继续执行。Access数据库基础及应用(3)说明循环变量必须为数值型。初值、终值都是数值型,可以是数值表达式。Step步长:可选参数。循环体中如果含有ExitFor语句,则循环体语句执行到此跳出循环。ExitFor语句后的所有语句不执行。例8-7求1-100之间自然数的和。本例程序结束后i的值为101。

提示:Debug对象在运行时将输出发送到立即窗口,其Print方法在立即窗口中显示文本。Access数据库基础及应用操作演示例8-8下面例子的循环体中含有ExitFor语句Fori=1To100Step2a=a+10Ifi>40ThenExitForEndIfNextDebug.Print"iis"+Str(i)本例程序结束后i的值为41。Access数据库基础及应用例8-9求算式:1+1/2!+1/3!+1/4!+……前10项的和。

DimiAsInteger,sAsSingle,aAsSinglea=1:s=0Fori=1To10a=a/is=s+aNextiDebug.Print"1+1/2!+1/3!+.…=";sAccess数据库基础及应用例8-10接收从键盘输入的10个大于0的不同整数,找出其中的最大值和对应的输入位置。max=0maxn=0fori=1To10num=Val(InputBox("请输入第"&i&"个大于0的整数:"))Ifmax<numThenmax=nummaxn=iEndIfNextiMsgBox("最大值为第"&maxn&"个输入的"&max)

Access数据库基础及应用例8-11某次大奖赛有7个评委同时为一位选手打分,要求去掉一个最高分和一个最低分,其余5个分数的平均值为该名参赛者的最后得分。Dimmark!,aver!,i%,max1!,min1!aver=0Fori=1To7mark=InputBox("请输入第"&i&"位评委的打分")Ifi=1Thenmax1=mark:min1=markElseIfmark<min1Thenmin1=markElseIfmark>max1Thenmax1=markEndIfEndIfaver=aver+markNextiaver=(aver-max1-min1)/5MsgBoxaverAccess数据库基础及应用2.While循环语句

(1)语句格式

While条件表达式语句块

Wend

(2)执行过程

1)判断条件是否成立,如果条件成立,就执行语句块;否则,转到第三步执行。

2)执行Wend语句,转到第一步执行。

3)执行Wend语句下面的语句。

(3)说明例8-12用While循环编写例8-7的程序。Access数据库基础及应用操作演示3.Do循环语句

(1)语句格式格式1:

DoWhile条件表达式语句块1[ExitDo]

语句块2Loop

功能:若条件表达式的结果为真,则执行Do和Loop之间的循环体,直到条件表达式结果为假。若遇到ExitDo语句,则结束循环。

Access数据库基础及应用

格式2:

DoUntil条件表达式语句块1[ExitDo]

语句块2Loop

功能:若条件表达式的结果为假,则执行Do和Loop之间的循环体,直到条件表达式结果为真。若遇到ExitDo语句,则结束循环。Access数据库基础及应用

格式3:

Do

语句块1[ExitDo]

语句块2LoopWhile条件表达式功能:首先执行一次Do和Loop之间的循环体,执行到Loop时判断条件表达式的结果,如果为真,继续执行循环体,直到条件表达式结果为假。Access数据库基础及应用

格式4:

Do

语句块1[ExitDo]

语句块2LoopUntil条件表达式功能:首先执行一次Do和Loop之间的循环体,执行到Loop时判断条件表达式的结果,如果为假,继续执行循环体,直到条件表达式结果为真。若遇到ExitDo语句,则结束循环。Access数据库基础及应用

例8-13创建一个窗体“n的阶乘”,窗体视图界面如下图所示,要求在文本框中输入一个整数后,单击“开始计算”按钮,会弹出一个消息框,显示该数的阶乘。操作演示Access数据库基础及应用例8-14用DoWhile…Loop循环编写例8-7的程序。Dimi,sumAsIntegersum=0i=1Dowhilei<100sum=sum+ii=i+1LoopDebug.Print“Sumis”+Str(sum)Access数据库基础及应用例8-15用DoUntil…Loop循环编写例8-7的程序。Dimi,sumAsIntegersum=0i=1Dountili>100sum=sum+ii=i+1LoopDebug.Print"Sumis"+Str(sum)例8-16用Do…LoopWhile循环编写例8-7的程序。Dimi,sumAsIntegersum=0i=1Dosum=sum+ii=i+1LoopWhilei<=100Debug.Print"Sumis"+Str(sum)例8-17

用Do…LoopUntil循环编写例8-7的程序。Dimi,sumAsIntegersum=0i=1Dosum=sum+ii=i+1LoopUntili>100Debug.Print"Sumis"+Str(sum)8.5.4GoTo控制语句

1.语句格式

GoTo标号

2.语句作用

无条件地转移到标号指定的那行语句。在VBA中,GoTo主要用于错误处理语句:

OnErrorGoTo标号Access数据库基础及应用

例8-18阅读下面程序段,分析程序的运行结果。

s=0Fori=1To1000s=s+iIfs>5000ThenGoTomlineNextmline:Debug.Prints

程序运行结果是在立即窗口显示5050。Access数据库基础及应用表2窗体常用的格式属性窗体常用格式属性说明Caption设置窗体的标题文字ScrollBars设置是否显示滚动条RecordSelector设置是否显示记录选定器NavigationButton设置是否显示导航按钮AutoCenter设置窗体打开时,是否自动放置在屏幕中央ControlBox设置是否在窗体中显示控制框CloseButton设置是否在窗体中显示关闭按钮MinMaxButton设置是否在窗体中显示最大化和最小化按钮Picture设置窗体的背景图片BorderStyle决定窗体的边框样式Access数据库基础及应用8.6常用对象的属性、方法和事件8.6.1窗体的属性、方法和事件

1.窗体常用属性

Access数据库基础及应用表3窗体常用的数据属性窗体常用数据属性说明RecordSource设置窗体的数据来源OrderBy设置窗体中记录的排序方式AllowFilters设置窗体中的记录是否可以筛选AllowEdits设置窗体中的记录是否可以编辑AllowDeletions设置窗体中的记录是否可以删除AllowAdditions设置窗体中的记录是否可以新增DataEntry设置数据的输入,不决定是否可以添加记录,只决定是否显示已有的记录

2.窗体常用方法

窗体最常用的方法是Refresh,使用该方法可刷新窗体。其使用格式为:

对象.Refresh

3.窗体常用事件表4

窗体的鼠标事件窗体鼠标事件说明Click在窗体上,单击鼠标左键一次所触发的事件DbClick在窗体上,双击鼠标左键所触发的事件MouseDown在窗体上,按下鼠标按键所触发的事件MouseUp在窗体上,放开鼠标按键所触发的事件MouseMove在窗体上,移动鼠标所触发的事件Access数据库基础及应用Access数据库基础及应用表5

窗体的窗口事件窗体窗口事件说明Open打开窗体,但数据尚未加载所触发的事件Load打开窗体,且数据已加载所触发的事件Close关闭窗体所触发的事件Unload关闭窗体,且数据被卸载所触发的事件Resize窗体大小发生改变所触发的事件Activate窗体成为活动中的窗口所触发的事件Timer窗体所设置的计时器间隔达到时所触发的事件

表6

窗体的焦点事件窗体焦点事件说明Deactivate焦点移到其他的窗口所触发的事件GotFocus控件获得焦点所触发的事件LostFocus控件失去焦点所触发的事件Current当焦点移到某一记录,使其成为当前记录,或者当对窗体进行刷新或重新查询时所触发的事件Access数据库基础及应用表7

窗体的键盘事件窗体键盘事件说明KeyDown对象获得焦点时,用户按下键盘上任意一个键时所触发的事件KeyPress对象获得焦点时,用户按下并且释放一个会产生ASCII码的键时所触发的事件KeyUp对象获得焦点时,放开键盘上的任何键所触发的事件表8

窗体的数据事件窗体数据事件说明BeforeUpdate当记录或控件被更新时所触发的事件AfterUpdate当记录或控件被更新后所触发的事件

8.6.2命令按钮的属性和事件

1.命令按钮常用属性Access数据库基础及应用表9

命令按钮常用属性常用属性说明Caption设置控件中要显示的文字Cancel指出命令按钮是否窗体的“取消”按钮(即响应Esc键的按钮)Default决定窗体的默认命令按钮(即响应Enter按键的按钮)Picture用于设置控件中要显示的图形

2.命令按钮常用方法

命令按钮最常用的方法是Move方法,用该方法来移动命令按钮的位置,其使用格式为:对象.Move(Left,Top[,Width][,High])

3.

命令按钮常用事件Access数据库基础及应用表10命令按钮常用事件常用事件说明Click单击命令按钮时所触发的事件MouseDown鼠标在命令按钮上按下时所触发的事件MouseUp鼠标在命令按钮上释放时所触发的事件MouseMove鼠标在命令按钮上移动时所触发的事件8.6.3文本框的属性和事件

1.文本框常用属性表11文本框常用属性常用属性说明BackColor和ForeColor设置文本框的前景色和背景色BorderStyle设置文本框的边框样式Enabled用于决定文本框是否可用Locked决定文本框是否可编辑Visible确定文本框是否可见Name用于标识文本框的名称Value设置文本框中显示的内容Text设置文本框中显示的内容(文本框必须获得焦点)InputMask设置为“密码”,任何输入的字符将以原字符保存,但显示为星号(*)Access数据库基础及应用

2.

文本框常用方法

文本框最常用的方法是SetFocus,使用该方法可把光标移到指定的文本框中,使之获得焦点。

其使用格式为:对象.SetFocus

3.文本框常用事件Access数据库基础及应用表12

文本框常用事件常用事件说明Change当用户输入新内容,或程序对文本框的显示内容重新赋值时所触发事件LostFocus当用户按下Tab键时光标离开文本框,或用鼠标选择其他对象时触发该事件8.6.4综合编程举例例8-19在教学管理系统中,设计一个用户登录窗体,窗体界面如下图所示。要求:用户名的输入在其下拉列表中进行选择,输入口令后,点击“确定”按钮进行验证,若正确,则进入系统主界面;若不正确,给出错误提示,允许重新输入,但最多只能输入三次口令。点击“取消”按钮,退出程序。操作演示Access数据库基础及应用例8-20

以下程序的功能是在立即窗口中输出100到200之间所有的素数,并统计输出素数的个数。PrivateSubCommand2_Click()Dimi%,j%,k%,t%'t为统计素数的个数DimbAsBooleanFori=100To200b=Truek=2j=Int(Sqr(i))DoWhilek<=jAndbIfIModk=0Thenb=falseEndIfk=k+1LoopIfb=TrueThent=t+1Debug.PrintiEndIfNextiDebug.Print"t=";tEndSubAccess数据库基础及应用

例8-21设计一个程序运行进度框。很多程序运行时,通过一个蓝色的进度框来显示程序的进展情况,Access也可以实现这一要求。操作演示Access数据库基础及应用例8-22设计一个简单的计算器,如下图所示,可以计算加、减、乘、除。操作演示Access数据库基础及应用

例8-23取面值一百元买水果,要求买苹果、香蕉和梨子三种水果,每种水果最少一个,共买40个。其中苹果2元一个、西瓜5元一个、梨1元一个,共有多少种买法?每种买法各有多少个?编写VBA程序。

Access数据库基础及应用DimwatermelonAsInteger,pearAsIntegerDimappleAsIntegerDimrsCountAsIntegerDimsAsStringForwatermelon=1To20'西瓜最多买20个Forapple=1To50'苹果最多买50个Pear=40-apple-watermelon'剩下买梨If(watermelon*5+2*apple+pear)=100Andpear>=1ThenCount=count+1s=s&"watermelon="&watermelon&"apple="&apple&"pear="&pear&Chr(13)EndIfNextappleNextwatermelonMsgBoxsMsgBox"水果买法共有"&Count&"种"Access数据库基础及应用8.7数组和用户自定义类型

8.7.1数组

数组是由一组具有相同数据类型的变量(称为数组元素)构成的集合。

1.数组的声明

数组在使用前,必须显式声明,可以用Dim语句来声明数组。数组的声明方式为:

Dim数组名([下标下界to]下标上界)[As数据类型](1)固定大小的数组

(2)动态数组

Access数据库基础及应用

例8-24定义动态数组a,设默认下界为1,并用循环赋值。

提示:ReDim语句只能出现在过程中,可以改变数组的大小和上下界,但不能改变数组的维数。操作演示Access数据库基础及应用

2.数组的使用

数组声明后,数组中的每个元素都可以当做单个的变量来使用,其使用方法同相同类型的普通变量。其元素引用格式为:

数组名(下标值表)

Access数据库基础及应用例8-25从键盘上输入10个整数,把这些数按从小到大到顺序输出,运行结果如下图所示。

选择算法及程序讲解参见教材。Access数据库基础及应用8.7.2用户自定义类型

1.用户自定义类型的定义

Type自定义类型名元素名[(下标)]as数据类型名

…[元素名[(下标)]as数据类型名]EndType参数说明:

(1)元素名:表示自定义类型中的一个成员。

(2)下标:如果省略,表示是简单变量,否则是数组。

(3)数据类型名:就是标准类型。Access数据库基础及应用教师表教师编号姓名性别参加工作时间T001王勇男1994-7-1T002肖贵男2001-8-3T003张雪莲女1991-9-3Typejshtype'自定义一个类型jshtypenoAsStringnameAsString*12sexAsString*1workdateAsDateEndType例8-26下表中,每个教师的基本信息包括:教师编号、姓名、性别、参加工作时间。试编写程序定义一个教师基本信息的自定义类型。Access数据库基础及应用

2.用户自定义类型的声明与使用

使用Type语句定义了一个用户自定义类型后,就可以在该声明范围内的任何位置声明该类型的变量,然后使用。

Access数据库基础及应用

8.8.1模块概述

1.什么是模块模块是MicrosoftAccess数据库中的一个重要对象,由VBA语言编写的程序集合。模块起着存放用户编写的VBA代码的作用,模块也是作为容器使用的。具体地说,模块就是由VBA通用声明和一个或多个过程组成的集合。

在Access2010打开模块时将启动VisualBasic界面。在此界面中模块显示如下图所示,主要包括五个部分:对象框、模块声明、视图按钮、模块过程、过程框。8.8模块Access数据库基础及应用

1.什么是模块对象框过程框模块声明模块过程视图按钮图2模块窗口Access数据库基础及应用

2.

模块的分类

(1)类模块类模块是可以包含新对象定义的模块。窗体模块和报表模块都是类模块,它们各自与某一特定窗体或报表相关联。

(2)标准模块标准模块是指当多个窗体共同执行一段代码时,为了避免重复,创建独立公用代码模块。(3)对象模块、通用模块和事件模块对象模块是指在窗体对象中为响应时间而执行的程序段。事件模块是指在窗体、报表控件属性中的过程代码,它只能在窗体和报表中出现。通用模块与事件属性无关,只由事件模块直接或间接调用。

Access数据库基础及应用3.模块创建方法

(1)方法一

(2)方法二

(3)方法三

(4)方法四8.8.2过程

1.

Sub过程

Sub过程执行一个操作或一系列运算,但没有返回值。

(1)子过程的定义格式

[Public|Private][Static]Sub子过程名([形参列表])[局部变量或常数定义][语句序列][ExitSub][语句序列]EndSubAccess数据库基础及应用

(2)参数说明

2.Function过程

Function过程能够返回一个计算结果。

(1)函数过程的定义格式

[Public|Private][Static]Function函数过程名([形参列表])[As类型][局部变量或常数定义][语句序列][ExitFunction][语句序列]

函数名=表达式

EndFunction

Access数据库基础及应用

(2)参数说明

3.过程的创建

(1)方法一

(2)方法二

4.过程的作用范围

5.过程的调用

(1)Sub过程的调用

1)调用格式格式一:

Call过程名([参数列表])Access数据库基础及应用Access数据库基础及应用格式二:过程名[参数列表]2)参数说明参数列表:这里的参数称为实参,与形参的个数、位置和类型必须一一对应,实参可以是常量、变量或表达式。多个实参之间用逗号分隔。参数传递:调用过程时,把实参的值传递给形参。

Access数据库基础及应用PrivateSub阶乘主过程()jg=1w=Val(InputBox("inputnum"))Call阶乘子过程(w,jg)MsgBox(jg)EndSub子过程程序代码如下:PublicSub阶乘子过程(js,jg)y=1x=jsDoWhiley<=xjg=jg*jsy=y+1js=js-1LoopEndSub例8-27使用过程调用计算N!=N*(N-1)!(N>0)

例8-28在窗体对象中,使用子过程实现数据的排序操作,当输入2个数值时,从大到小排列并显示结果。操作演示

提示:该例子中,Swap(x,y)子程序定义了2个形参x和y,主要任务是:从主调程序获得初值,又将结果返回给主调程序,而子过程名Swap是无值的。Access数据库基础及应用(2)Function过程的调用

1)调用格式

变量名=函数过程名([实参列表])

2)参数说明

参数列表和参数说明同子过程的调用。

注意:由于函数过程会返回一个值,故函数过程不作为单独的语句加以调用,必须作为表达式或表达式中的一部分使用。

例8-29在窗体对象中,使用函数过程实现任意半径的圆面积计算,当输入圆半径值时,计算并显示圆面积。

操作演示

提示:函数过程可以被查询、宏等调用使用,在一些计算控件的设计中经常使用。

Access数据库基础及应用8.8.3参数传递

在VBA中,实参向形参的数据传递有2种方式,即传值方式和传址方式。传址调用是系统默认方式。区分两种方式的标志是:要使用传值的形参,在定义时前面加上“ByVal”关键字,否则为传址方式。

1.

传值调用的处理方式

传值调用方式具有单向性。

2.传址调用的处理方式

传址调用方式具有双向性。Access数据库基础及应用

注意:在调用过程时,若要对实参进行处理并返回处理结果,必须使用传址调用方式。这时的实参必须是与形参同类型的变量,不能是常量或表达式。若不想改变实参的值,一般应选用传值调用方式。当实参是常量或表达式时,形参即使已传址(ByRef选项)定义说明,实际传递的也只是常量或表达式的值,这种情况下,传址调用的双向性不起作用。Access数据库基础及应用主调过程代码如下:PrivateSubMain_Click()DimnAsInteger'定义整形变量nn=6'变量n赋初值6Calltest(n)MsgBoxn'显示n值EndSub子过程代码如下:PublicSubTest(ByRefxAsInteger)x=x+10EndSub

提示:当主调过程Main_Click()调用子过程Test()后,“Msgboxn”语句显示n的值已经发生了变化,其值变为16,说明通过传址调用改变了实参n的值。在上例中,需要操作实参的值,使用的是系统默认的传址调用方式,若使用传值调用方式,请读者分析处理结果的变化。例8-30创建有参子过程Test(),通过主调过程Main-click()被调用,观察实参值的变化。Access数据库基础及应用

例8-31

阅读下面程序代码,分析程序运行结果。

主调过程代码如下:

PrivateSubCommand1_Click()x=10:y=20Debug.Print"(1)x=";x,"y=";yCallAA(x,y)Debug.Print"(2)x=";x,"y=";yEndSub

子过程代码如下:

PrivateSubAA(ByValm,n)m=100:n=200m=m+nn=2*n+mEndSub思考:如果将子过程中的“PrivateSubAA(ByValm,n)”换成“PrivateSubAA(m,n)”,程序的运行结果又会是什么呢?Access数据库基础及应用

8.8.4VBA的内置函数Access数据库基础及应用表13常用数学函数函数说明实例返回结果Abs(N)返回数值表达式的绝对值Abs(-4.8)4.8Int(N)返回数值表达式的整数部分,若参数为负数

温馨提示

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

评论

0/150

提交评论