![[工学]第8章 模块和VBA程序设计.ppt_第1页](http://file.renrendoc.com/FileRoot1/2018-12/27/a205fef6-31ec-453f-b29b-e34bbff3900f/a205fef6-31ec-453f-b29b-e34bbff3900f1.gif)
![[工学]第8章 模块和VBA程序设计.ppt_第2页](http://file.renrendoc.com/FileRoot1/2018-12/27/a205fef6-31ec-453f-b29b-e34bbff3900f/a205fef6-31ec-453f-b29b-e34bbff3900f2.gif)
![[工学]第8章 模块和VBA程序设计.ppt_第3页](http://file.renrendoc.com/FileRoot1/2018-12/27/a205fef6-31ec-453f-b29b-e34bbff3900f/a205fef6-31ec-453f-b29b-e34bbff3900f3.gif)
![[工学]第8章 模块和VBA程序设计.ppt_第4页](http://file.renrendoc.com/FileRoot1/2018-12/27/a205fef6-31ec-453f-b29b-e34bbff3900f/a205fef6-31ec-453f-b29b-e34bbff3900f4.gif)
![[工学]第8章 模块和VBA程序设计.ppt_第5页](http://file.renrendoc.com/FileRoot1/2018-12/27/a205fef6-31ec-453f-b29b-e34bbff3900f/a205fef6-31ec-453f-b29b-e34bbff3900f5.gif)
已阅读5页,还剩112页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,1,第8章 模块的设计与使用,2,本章要求: 1、了解VBA编程环境; 2、掌握VBA编程基础:常量,变量,表达式; 3、掌握顺序控制,选择控制,循环控制 4、了解VBA模块 本章要点: 掌握顺序控制,选择控制,循环控制 学时安排: 6学时(理论)+6学时(实践),第8章 模块的设计与使用,3,第8章 模块的设计与使用, VBA程序设计基础, 模块的概念, 常用标准函数, VBA的程序结构, VBA的数据库编程, 过程调用和参数传递,4,在Access系统中,把宏、窗体和报表等对象结合起来,不用编写程序代码就可以建立功能较完善的数据库管理系统。但宏的功能是有局限性的,它只能处理一些简单的操作,如果要实现功能强大的数据管理,以及灵活的控制功能,宏对象就无能为力了。这时,就需要编写程序模块来实现上述的功能。本章介绍模块的概念和用来建立模块的VBA语言的基础知识。,第8章 模块的设计与使用,5,8.1认识模块,8.1.1模块的基本概念,在Access中,模块分为类模块和标准模块两种类型。 (1)类模块 类模块包括窗体模块和报表模块,它们与各自的窗体或报表相关联。 窗体模块中的事件过程的代码用于响应窗体或窗体上控件的触发事件。报表模块中的事件过程的代码用于响应报表或报表上控件的触发事件。,1.模块的分类,6,8.1认识模块,(2)标准模块 标准模块包含与任何其他对象都无关的常规过程,以及可以从数据库任何位置运行的经常使用的过程。标准模块和某个特定对象无关的类模块的主要区别在于其范围和生命周期。,8.1.1模块的基本概念,1.模块的分类,7,8.1认识模块,事件过程是专为特定事件编写的一组代码,被窗体或报表的特定事件调用,实现特定的操作,并对用户的操作做出响应。 例如,单击命令按钮,改变标签的标题。 事件过程只能在类模块中定义。当窗体或报表的第一个事件过程创建后,系统会自动创建与之关联的窗体模块或报表模块,通过特定事件激发事件过程执行。所以,过程与类模块密不可分。,2事件过程,8.1.1模块的基本概念,8,8.1认识模块,通用过程是与特定事件无关的一组代码,能被多个同类型或不同类型的事件调用。 类模块和标准模块中都可以定义通用过程,3通用过程,8.1.1模块的基本概念,4使用模块的几种情况,9,8.1认识模块,类模块与窗体或报表关联,有以下3种方法,方法1: 在窗体设计视图中选定窗体控件, 单击属性窗口“事件”选项卡,选定某个事件,单击单元格右边的“生成器”按钮 ,在“选择生成器”对话框中选择“代码生成器”,单击“确定”按钮。,5建立第一个类模块,8.1.1模块的基本概念,10,8.1认识模块,方法2:在窗体设计视图中选定控件,单击标准工具栏“生成器”按钮 ,在“选择生成器”对话框中选择“代码生成器”。,方法3:在窗体设计视图中选定控件,单击鼠标右键,从快捷菜单中选择“事件生成器”,在“选择生成器”对话框中选择“代码生成器”。,5建立第一个类模块,8.1.1模块的基本概念,11,8.1认识模块,例8.1 建立第一个类模块,创建如图8-2所示窗体,单击按钮时,显示“欢迎使用Access!”,例8.1 建立第一个类模块,单击按钮时显示“欢迎使用Access!”,操作步骤: (1)在数据库中,创建窗体,设置窗体属性,使“记录选择器钮”、“导航按钮”、“分隔线”均不显示。,(2)选择命令按钮控件,单击鼠标右键,从快捷菜单中选择“事件生成器”,在“选择生成器”对话框中选择“代码生成器”。 (3)在事件过程中输入代码,,(4)转到窗体视图,单击“开始”按钮。,5建立第一个类模块,8.1.1模块的基本概念,12,8.1认识模块,6建立第一个标准模块,(1)建立标准模块的方法 选择数据库窗口“模块”对象,单击“新建”按钮,新建标准模块。 (2)打开标准模块方法 方法1:在数据库窗口单击一个标准模块,单击“设计”按钮,打开该模块。 方法2:在数据库窗口双击一个标准模块,打开该模块。 方法3:在数据库窗口单击一个标准模块,选择“工具/宏/Visual Basic 编辑器”命令,打开该模块。,8.1.1模块的基本概念,13,8.1认识模块,操作步骤: (1)在数据库中,选择“模块”对象,单击“新建”按钮。 (2) 输入代码。,例8-2 建立第一个标准模块,运行时显示“欢迎使用Access!”,(3)单击“保存”按钮,为模块起名:Frist (4)选择“运行/运行子程序”命令,数据库窗口显示相应信息。,6建立第一个标准模块,8.1.1模块的基本概念,14,8.1认识模块,8.1.2模块设计环境,15,8.1认识模块,8.1.2模块设计环境,16,8.2 VBA编程基本概念和步骤,8.2.1基本概念,类是某种类型对象的原型,类本身不是一个对象,为了实际使用相应对象,需要对相关的类进行实例化。 位于Access数据库窗口左边的7个对象:表、查询、窗体、报表、页、宏、模块,应该准确地称为7个对象类,1对象,2类,在面向对象的程序设计中,基本概念包括对象、类、属性、事件、方法等。,在自然界中,一个对象就是一个实体,如一个人就是一个对象。面向对象程序设计的主要任务是以“对象”为中心设计模块。Access中的对象代表应用程序中的元素,如表,窗体、按钮等。,17,8.2 VBA编程基本概念和步骤,8.2.1基本概念,属性描述了对象的性质 例如,文本框控件对象中的名称、字体的相关属性等。 引用方式为:对象.属性 例如: Text1.Forecolor= VbRed MsgBox Me.Caption 每个对象都有自己的属性,对象的类别不同,属性也会不同。同一类型的不同对象,属性也会有差异。,3.属性,18,8.2 VBA编程基本概念和步骤,8.2.1基本概念,事件是对象能够识别的动作。 如单击命令按钮,打开窗体,其中的“单击”事件是命令按钮能识别的动作。 响应事件的方式有以下2种。 (1)用宏对象响应对象的事件。 (2)给事件编写VBA代码,用事件过程响应对象的事件。,如 Private Sub Command1_Click() End sub 其中,Command1是对象名,Click是事件名。,4事件,19,8.2 VBA编程基本概念和步骤,8.2.1基本概念,方法描述了对象的行为,即在某个对象上执行的一个过程, 例如, 打开和关闭报表对象。 引用方式为:对象.方法 例如: Text1.SetFocus,事件,方法,属性,5方法,20,8.2.2 用代码设置窗体属性和事件 Me是“包含这段代码的对象”的简称,可以代表当前 对象。在类模块中,Me代表当前窗体或当前报表。 例如: Me.Label1.Caption= “学生信息表“ 定义窗体中标签Label1的Caption属性。 (2) Me.Caption= “学生信息一览表“ 定义窗体本身的Caption属性。,8.2 VBA编程基本概念和步骤,1.关鍵字Me,21,能用代码设置的窗体属性主要包括窗体标题、窗体数据源、背景图片等。,8.2.2 用代码设置窗体属性和事件,8.2 VBA编程基本概念和步骤,例8-3 创建窗体,并在窗体中建立文本框txtXm和命令按钮cmdStart,单击命令按钮时,窗体中插入一图片,并在文本框中显示“学生信息表”中的第一条记录的姓名。,2用代码设窗体置性,22,8.2.2 用代码设置窗体属性和事件,8.2 VBA编程基本概念和步骤,2用代码设窗体置性,操作步骤: (1)创建窗体,建立文本框,并将其“名称”属性改为txtXm;创建命令按钮,将其“名称”属性改为cmdStart,“标题”属性改为“开始”。 (2)编写窗体的Load事件和Click事件 (3)转到窗体视图,单击命令按钮“开始”,,23,8.2.3 编程步骤,8.2 VBA编程基本概念和步骤,VBA编程有以下几个主要步骤: 1创建用户界面 2设置对象属性 3对象事件过程的编写 4运行和调试 5保存窗体,24,8.2.4 DoCmd对象,8.2 VBA编程基本概念和步骤,使用DoCmd调用方法的格式如下: DoCmd.方法名 参数 例如: DoCmd.OpenForm ”学生信息” DoCmd. OpenTable “课程信息“ DoCmd. RunMacro “Macro1“,25,8.3.1 VBA的基本数据类型,8.3 VBA编程基础,(2). 长整形 Long 类型申明符为“&”,(1) 整型 integer 类型申明符为“%”,表示范围:- 32768 + 32767 例:8% -21 +5% 5,(3). 单精度数 Single 类型申明符为“! ( E )”,最多有7位有效数字, 表示范围:- 3.402823E+38 (1038) + 3.402823E+38 例:-3.4! 1.0E+2 (1.0 102),表示范围:- 2147483648 + 2147483647 例如:32768 -21&,26,8.3.1 VBA的基本数据类型,8.3 VBA编程基础,(4). 双精度数 Double类型申明符为“# ( D )”,最多有15位有效数字,,(5). 字符型数据 string 类型申明符为“ $ ” 字符型数据是用双引号括起来的一串ASCII码字符。专门用来存放文字信息的。 字符串是放在双引号内的若干个字符,其中长度为0(即不含任何字符)的字符串称为空字符串。 例:“This a book “ “ “,(6).逻辑型 Boolean 逻辑型数据只有真和假两种值,长度固定为1个字符。,27,(7).日期时间型 Date 日期时间型(Date Time)数据是描述日期和时间的数 据,长度固定为8个字符。 日期时间型数据除包括日期数据的年、月、日外,还包括 时、分、秒以及上午、下午等内容。,(8) . 货币型(Currency)类型申明符为 货币数据为表示钱款而设置的。,(9)变体形(Variant) 变体形是指所有未定义的变量默认的数据类型,是一种可变的数据类型,可以表示任何值,8.3 VBA编程基础,8.3.1 VBA的基本数据类型,28,8.3.2常量,8.3 VBA编程基础,常量指在程序运行过程中其值保持不变的量。常量有两种:直接常量和符号常量。 1直接常量 取值直接反映了其类型;例如:“abcd“,345 2符号常量 定义符号常量,用来代替数值或字符串,提高代码的可读性,便于维护。 一般格式为: Const 常量名=表达式 , 常量名=表达式. 例如: Const PI=3.1415926 程序运行中凡是遇到3.1415926,均可用PI代替。,29,8.3.3 变量,8.3 VBA编程基础,变量是指程序运行时值会发生变化的数据。在程序运行时数据是在内存中存放的,内存中的位置是用不同的名字表示的,这个名字就是变量的名称,该内存位置上的数据就是该变量的值。,30,8.3.3 变量,8.3 VBA编程基础,(1)以字母开始,可以包括数字、字母和下划线;不能多于255个字符; (2) 不能与关键字重复(如End、Printe、Sub等); (3)在同一作用域中,变量名不能重复。,1变量命名规则,31,8.3.3 变量,8.3 VBA编程基础,2变量的类型和定义,使用变量前,一般必须声明变量名和变量类型,使系统分配相应的内存间,并确定该空间可存储的数据类型。 (1) 用类型说明符来标识 把类型说明符放在变量名的尾部,可以标识不同的变量类型。其中%表示整型,&表示长整型,!表示单精度型,#表示双精度型,表示货币型,$表示字符串型。 例如: Total% Amount# Lzlame$,32,8.3.3 变量,8.3 VBA编程基础,(2)在定义变量时指定其类型 可以用下面的格式定义变量: Dim 变量名 As 类型 例如: Dim Cj As Integer , Total As Double,2变量的类型和定义,33,8.3.4 表达式,8.3 VBA编程基础,表达式是将常量、变量、字段名、控件属性值和函数用运算符组成的式子,完成各种形式的运算和处理。,1算术表达式,算术运算符与操作数组合的式子称为算术表达式。,34,8.3.4 表达式,8.3 VBA编程基础,字符串连接运算符是把两个字符串首尾连接成一个字符串。,2字符串表达式,35,8.3 VBA编程基础,8.3.4 表达式,关系运算符用来对两个值进行比较,比较的结果是一个逻辑值。如果关系成立,则结果True,否则结果为False。,3关系表达式,36,8.3 VBA编程基础,8.3.4 表达式,逻辑运算也称布尔运算。用逻辑运算符连接两个或多个关系式,组成一个布尔表达式。其结果为逻辑值True或False。,4.逻辑运算符,37,8.3 VBA编程基础,8.3.4 表达式,5运算符的优先级,在表达式中,当运算符不止一种时,要先进行算术运算,接着进行比较运算,最后才是逻辑运算。所有比较运算符的优先顺序都相同;逻辑运算符中先算Not运算,再算And运算,然后是Or运算。 可以用小括号“( )”改变表达式中运算的优先顺序,强制表达式中的某些部分优先进行计算。括号内的运算总是优先于括号外的运算。在括号之内,运算符的优先顺序不变。,38,8.3 VBA编程基础,8.3.5 内部函数 在VBA中提供了近百个内置的标准函数,用户可 以直接调 用标准函数来完成许多操作。标准函数的 形式如下: 函数名(参数表列),39,8.3 VBA编程基础,8.3.5 内部函数,1数学函数,40,8.3 VBA编程基础,8.3.5 内部函数,2常用字符串函数,提示:常用函数的练习 进入VBE,单击”视图/立即窗口”,在立即窗口中输入相应命令,敲回车执行,41,8.3 VBA编程基础,8.3.5 内部函数,3日期和时间函数,42,8.4 VBA程序的流程控制结构,8.4.1 VBA常用语句,(1)将单行语句分成多行 (2) 将多个语句合并到同一行上 VBA允许将两个或多个语句放在同一行,要用冒号“:”将它们分开。 (3)在语句代码中添加注释 为了增加程序的可读性,在程序中可以添加适当的注释。 注释方式有两种“Rem”和“”。,1语句的书写规则,43,8.4 VBA程序的流程控制结构,8.4.1 VBA常用语句,赋值语句用来为变量指定一个值。 格式如下: = 例如: x = 5 s = 3.14 * x 2 y = Int(s) x=y x=x+1 label0.caption=“总成绩”,2赋值语句,注:如果变量未被赋值而直接引用,则数值型变量的值为0,字符型变量的值为空串,逻辑型变量的值为False。,44,8.4 VBA程序的流程控制结构,8.4.1 VBA常用语句,输入框函数用于在一个对话框中显示提示,等待用户输入正文并按下按钮,然后返回包含文本框内容的数据信息。 函数格式: InputBox(Prompt,Titlel(,Default,Xpos,Ypos,Helpfile,Context),3输入框函数,例:Private Sub Command1_Click() q1 = InputBox(“请输入您的身份证号”,“输入身份证号”,“19781201”) msgbox “你的身份证号是:” & q1 End Sub,提示,缺省,标题,提示,标题,45,8.4 VBA程序的流程控制结构,8.4.1 VBA常用语句,MsgBox使用消息框输出信息。消息框由标题栏信息、提示信息,一个图标和一个或多个命令按钮4个部分组成,图标的形式及命令按钮的个数可以由用户设置。 MsgBox函数的格式如下: 变量名=MsgBox(提示,按钮,标题) MsgBox语句的格式如下: MsgBox(提示,按钮,标题),4. MsgBox函数和MsgBox语句,46,8.4 VBA程序的流程控制结构,8.4.2顺序结构,计算机程序的执行控制流程有三种基本结构:顺序结构、分支结构和循环结构。 面向过程的程序设计中,程序不论从宏观到微观,都是由这三种结构组成。 面向对象程序设计增加了事件驱动机制,由用户触发某事件去执行相应的事件过程。 这些事件处理过程之间并不形成特定的执行次序,但对每一个事件过程内部而言,又包含这三种基本结构。,47,8.4 VBA程序的流程控制结构,8.4.2顺序结构,顺序结构是简单的一种结构,计算机按照语句的排列顺序依次执行每一条语句。,例8-5 :计算鸡兔同笼,分析:h代表头, F代表脚,c代表鸡. R代表兔子 R+C=H 2C+4R=F 2 -得: R=(F-2H)/2 C=H-R,48,8.4 VBA程序的流程控制结构,8.4.2顺序结构,例8-5 :计算鸡兔同笼,Private Sub Command8_Click() Dim h%, f%, c!, r! h = Text0 f = Text2 r = (f - 2 * h) / 2 c = h - r Text4 = c Text6 = r End Sub,49,8.4 VBA程序的流程控制结构,选择结构可以根据条件表达式的值来选择程序运行的分支语句,主要有以下一些结构:,8.4.4 选择结构,格式1:If 条件 Then 语句序列 格式2: If 条件表达式 Then 语句序列 End If 当程序执行到这种格式的If语句时,如果条件表达式为真,将执行Then后面的语句序列,如果条件表达式为假,程序将跳过语句序列而直接执行End If后面的语句。,1.单分支If语句,50,8.4 VBA程序的流程控制结构,1.单分支If语句,例如: Sub Panduan() Dim x As Integer x = InputBox(“请输入X的值“) If x 0 Then MsgBox “这是一个正数“ End If End Sub 运行模块时,当输入的值大于零时,弹出消息框提示为“这是一个正数”。,8.4.4 选择结构,51,8.4 VBA程序的流程控制结构,8.4.4 选择结构,格式: If Then Else End If 执行过程:判断条件,如果为真,执行语句序列1;如果为假,执行语句序列2。,2.双分支语句,8.4.4 选择结构,52,8.4 VBA程序的流程控制结构,8.4.4 选择结构,例8-6 输入一个成绩,给出“及格”或“不及格”的信息提示。 选择“模块”对象,单击“新建按钮”。在代码窗口输入以下代码。 Sub Cjmark() Dim cj As Integer cj = InputBox(“请输入成绩:“) If cj = 60 Then MsgBox “及格“ Else MsgBox “不及格“ End If End Sub,2.双分支语句,53,8.4 VBA程序的流程控制结构,8.4.4 选择结构,例8-7 完善鸡兔同笼问题,当计算结果为负数或小数时,提醒用户“数据有误”,并重新输入总头数和总脚数。,54,8.4 VBA程序的流程控制结构,8.4.4 选择结构,3If-Then-ElseIf多分支,执行过程:依次判断条件,如果找到一个满足的条件,则执行其下面的语句序列,然后跳过End If,执行后面的程序。如果所列的条件都不满足,则执行Else语句后面的语句序列;如果所列出的条件都不满足,又没有Else子句,是直接跳过End If,不执行后面的任何语句块。,If 条件l Then 语句序列1 ElseIf 条件2 Then 语句序列2 Else 语句序列n+1 End If,55,8.4 VBA程序的流程控制结构,8.4.4 选择结构,例8-8 编写程序,将学生的百分制成绩按要求转换成相应的等次输出。成绩在90,100为“优秀”;成绩在80,90)为“良好”;成绩在70,80)为“中等”;成绩在60,70),60分以下的为“不及格”,3If-Then-ElseIf多分支,56,8.4 VBA程序的流程控制结构,8.4.4 选择结构,3If-Then-ElseIf多分支,例8-8:,57,8.4 VBA程序的流程控制结构,8.4.4 选择结构,4Select Case 语句(情况语句),执行过程:首先计算变量或表达式的值,然后依次计算Case子句中表达式的值,如果变量或表达式的值和某个Case表达式的值吻合,则执行相应的语句序列,然后执行End Select下面的语句。当前Case表达式的值不满足,则进行下一个Case语句的判断。如果都不满足,有Case Else部分则执行语句序列n+1,否则执行End Select后面的语句。,58,8.4 VBA程序的流程控制结构,8.4.4 选择结构,4Select Case 语句(情况语句),Select Case Case Case Case Case Else End Select,59,8.4 VBA程序的流程控制结构,8.4.4 选择结构,4Select Case 语句(情况语句),Case表达式可以是下列4种格式之一: 单一数值,如Case 2。 一行并列的数值,数值之间用逗号隔开,如Case 5, 6,7 用关键字To分隔开两个数值或表达式之间的范围, 如Case 1 to 10 用关键字Is连接关系运算符,如=、=,后面跟变量或具体的值,Is=15。 Case语句是依次测试的,并执行第一个符合Case条件的相关的程序代码,即使再有其他符合条件的分支也不会再执行。如果没有找到符合条件的,并且有Case Else语句,就会执行该语句后面的程序代码。,60,8.4 VBA程序的流程控制结构,8.4.4 选择结构,4Select Case 语句(情况语句),例8-9 将例8-8的程序代码用Select Case情况语句完成,61,8.4 VBA程序的流程控制结构,8.4.4 选择结构,IIf(,) IIf函数首先要计算“条件表达式”,当“条件表达式”的值为“真”时,则IIf函数返回的值;否则,返回的值。 例如,求x,y中大的数,将其存入MaxNum变量中,可以使用如下语句: MaxNum = IIf(x y, x, y),5IIf( ) 函数,62,在程序设计中,可以使用循环语句在满足条件的前提下重复执行一行或几行程序代码。 在VBA中,循环语句有3种: ForNext DoLoop WhileWend,8.4 VBA的程序结构,8.4.4 循环语句,63,功能:能够重复执行程序代码区域特定次数。 格式: For 循环变量=初值 To 终值 Step步长 循环体 条件语句序列 Exit For 结束条件语句序列 Next 循环变量,8.4 VBA的程序结构,1ForNext语句,8.4.4 循环语句,64,For语句的执行步骤如下: (1)循环变量取初值。 (2)循环变量与终值比较,确定循环是否进行. (3)执行循环体。 (4)循环变量值增加步长,即循环变量=循环变量+步长,程序跳转至(2)。,8.4 VBA的程序结构,1ForNext语句,8.4.4 循环语句,例8-10:使用ForNext语句计算1100之间数的和。 Private Sub Command1_Click() Dim i%, sum% For i = l To 100 sum = sum + i Next i Label2.Caption = sum End Sub,思考:如何计算2+4+.+100 1+1/2-1/3+1/4+.,65,8.4 VBA的程序结构,1ForNext语句,8.4.4 循环语句,例:输出1-10的数 For i = 1 To 10 s = s & “ “ & i Next Text0=s,例:输出10-1的数 For i = 10 To 1 step -1 s = s & “ “ & i Next Text0=s,思考:换成s=i & s ,程序结果如何?,66,8.4 VBA的程序结构,1ForNext语句,8.4.4 循环语句,例:输入任意10个数,求其最大数 Private Sub Command4_Click() Dim x!, max! x = InputBox(“第1个数“) Text0 = x: max=x For i = 2 To 4 x = InputBox(“第“ & i & “个数“) Text0 = Text0 & “ “ & x If x max Then max = x End If Next i Label3.Caption = “最大数为: “ & max End Sub,思考:如何求最大数的位置?,67,(1)Do WhileLoop 功能:当条件式结果为真时,重复执行循环体。当条件式结果为假或执行到Exit Do时,结束循环。 语句格式: Do While 条件式 循环体 条件语句序列 Exit Do 结束条件语句序列 Loop,8.4 VBA的程序结构,2DoLoop语句,8.4.4 循环语句,68,例:用Do WhileLoop语句计算1100之间数的和。 Dim i As Integer Dim Sum As Integer i=1 Do While i=100 Sum=Sum+i i=i+1 Loop,8.4 VBA的程序结构,2DoLoop语句,8.4.4 循环语句,对比:使用ForNext语句计算1100之间数的和。 Dim i%, sum% For i = l To 100 sum = sum + i Next i,69,(2)Do UntilLoop 语句功能:Do UntilLoop循环结构是当条件式值为假时,重复执行循环体。当条件式值为真,结束循环。 语句格式: Do Until 条件式 循环体 条件语句序列 Exit Do 结束条件语句序列 Loop,8.4 VBA的程序结构,2DoLoop语句,8.4.4 循环语句,70,例:用Do UntilLoop语句计算1100之间数的和。 Dim i As Integer Dim Sum As Integer i=1 Do Until i100 Sum=Sum+i i=i+1 Loop,返 回,8.4 VBA的程序结构,2DoLoop语句,8.4.4 循环语句,对比:用Do WhileLoop语句计算1100之间数的和。 Dim i As Integer Dim Sum As Integer i=1 Do While i=100 Sum=Sum+i i=i+1 Loop,71,返 回,8.4 VBA的程序结构,2DoLoop语句,8.4.4 循环语句,例8-12输入若干个学生成绩以-l为结束标志,求这些成绩的平均值。 单击“模块”对象,添加模块,编写过程代码,运行过程。,Sub avgCj() Dim cj As Integer, i As Integer, avg As Single i = 1 cj = InputBox(“请输入第“ & i & “位学生的成绩“) Do Until cj = -1 avg = avg + cj i = i + 1 cj = InputBox(“请输入第“ & i & “位学生的成绩“) Loop MsgBox (“平均成绩=“ & Round(avg / (i - 1), 1) End Sub,72,3循环嵌套的使用(补充知识),一个循环体内又包含了一个完整的循环结构称为循环的嵌套.,For ii =1 To 10 For jj=1 To 20 Next ii Next jj,For ii =1 To 10 For ii=1 To 20 Next ii Next ii,For ii =1 To 10 For jj=1 To 20 Next jj Next ii,For ii =1 To 10 Next ii For ii =1 To 10 Next ii,8.4 VBA的程序结构,73,例 : 百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。 设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为: x+y+=100 3x+2y+0.5z=100,8.4 VBA的程序结构,3循环嵌套的使用(补充知识),74,例 : 百元买百鸡问题,8.4 VBA的程序结构,3循环嵌套的使用(补充知识),75,返 回,数组是一组具有相同属性和相同类型的数据,并用统一的名称作为标识的数据类型,这个名称称为数组名,数组中的每个数据称为数组元素,或称为数据元素变量。数组元素在数组中的序号称为下标,数组元素变量由数组名和数组下标组成,例如,A(1)、A(2)、A(3)表示数组A的3个元素。,8.5 数组,76,数组在使用之前也要进行定义, 格式 : Dim 数组名(下标下限 to 下标上限, 下标下限 to 下标上限) As 数据类型,例: Dim A(10) As Integer Dim B(1 To 10) As Integer Dim c(1 to 3,1 to 5) As Integer,注意: Option Base 1 数组的默认下标下限设置为1 Option Base 0 数组的默认下标下限设置为0,8.5 数组,8.5.1 数组的声明,77,例8-14:输入任意10个学生的成绩,输出大于平均成绩的数据。,Private Sub cmdStart_Click() Dim a(10) As Single, S!,av! For I = 1 To 10 a(I) = InputBox( “请输入第“ & I & “个数“) S = S + a(I) txt1 = txt1 & “ “ & a(I) Next I av = S / 10 For I = 1 To 10 If a(I) av Then Txt2 = Txt2 & “ “ & a(I) End If Next I End Sub,8.5 数组,8.5.2 数组的使用,78,例:求波斐那契数列,已经数列第一二项的值,从第三项开始每一项的值等于前两项之和 Private Sub Command4_Click() Dim a(10) As Single a(1) = Text0 a(2) = Text1 For i = 3 To 10 a(i) = a(i - 1) + a(i - 2) Text3 = Text3 & “ “ & a(i) Next i End Sub,8.5 数组,8.5.2 数组的使用,79,8.6 过程调用与参数传递,一个过程在执行过程中可以调用另外一个过程,同时将参数传递过去。调用完成后,再回到本过程继续执行。 过程是一段独立的程序代码,用来执行特定任务,这段代码能被反复调用。模块包括一个声明区域和多个过程,过程是模块的组成单元。 过程名是标识符,命名规则与变量的命名规则相同。过程不能与模块重名,所有标准模块中的过程都不能重名,否则调用过程会出现混乱。 VBA根据是否有返回值将过程分为两类:Sub过程和Function过程。,80,8.6 过程调用与参数传递,8.6.1 Sub过程,Sub过程又称为子过程,调用Sub过程只执行一系列操作,无返回值。,1Sub过程定义格式,Sub 过程名(形参l as 数据类型,形参2 as 数据类型,) 语句序列 End Sub,81,8.6 过程调用与参数传递,8.6.1 Sub过程,格式1:Call 过程名(实参1,实参2,) 格式2:过程名 实参1,实参2,,2. Sub过程调用格式,(1)参数之间用逗号分隔,形参与实参要个数相同,类型匹配。 (2)调用Sub过程时,格式1的实参必须加括号,格式2的实参不能加括号。 (3)用Exit Sub语句可以立即从Sub过程退出。 (4)标准模块中的过程可以被所有对象调用,类模块中的过程只在本模块中有效。,3说明,82,8.6 过程调用与参数传递,8.6.1 Sub过程,例8-14 创建两个子程序过程Add和Substract ,Add过程实现两个参数相加,Substract实现两个参数相减。输入两个数,调用这两个子程序,计算相加和相减的结果。,83,8.6 过程调用与参数传递,8.6.2 Function过程,Function过程又称为自定义函数,因为Function过程有返回值,所以建立过程时要给返回值定义数据类型。Function过程通常在标准模块中定义,使用方法与内置函数相似。,84,8.6 过程调用与参数传递,8.6.2 Function过程,2Function过程调用格式,调用Function过程的方式是直接引用过程名,过程名通常用在表达式中。,1Function过程定义格式,Function 过程名(形参l as 数据类型,形参2 as数据类型,)as数据类型 语句序列 过程名=表达式 End Function,85,8.6 过程调用与参数传递,8.6.2 Function过程,(l)形参与实参要个数相同、类型匹配。 (2)“过程名=表达式”是定义Function过程不可缺少的语句。 (3)用Exit Function可以中途退出Function过程。 (4)可以用Public或Private或Static定义过程的作用域。,3说明,86,8.6 过程调用与参数传递,8.6.2 Function过程,例8-15 使用Function过程,计算阶乘。,87,8.6 过程调用与参数传递,8.6.3参数传递,在调用过程中,一般主调过程和被调过程之间有数据传递,也就是主调过程的实参传递给被调过程的形参,然后执行被调过程。 实参向形参的数据传递有两种方式:传值方式和传址方式。,88,8.6 过程调用与参数传递,8.6.3参数传递,在形参前面加ByVal说明符,表示参数传递是传值方式,是一种单向的数据传递。即调用时只能由实参将值传递给形参,调用结束后不能由形参将操作结果返回给实参。 实参可以是常量或表达式。,1传值方式,89,8.6 过程调用与参数传递,8.6.3参数传递,在形参前面加ByRef说明符或省略不写,表示参数传递是传址方式,是一种双向的数据传递。即调用时由实参将值传递给形参,调用结束后由形参将操作结果返回给实参。 实参只能是变量。,2传址方式,90,8.6 过程调用与参数传递,例8-17 阅读下面程序代码,分析程序运行结果,8.6.3参数传递,91,8.6 过程调用与参数传递,8.6.4 变量的作用域,在模块的过程内部用Dim或Static关键字声明的变量,称为局部变量。局部变量的作用范围是局部的,只在过程执行期间才存在。,变量可被访问的范围称为变量的作用范围,也称为变量的作用域。变量的作用域有三个层次:局部范围、模块范围和全局范围。,1局部范围,92,8.6 过程调用与参数传递,8.6.4 变量的作用域,变量定义在模块的所有子过程或函数过程的外部,在模块的通用声明区域,用Dim或Private关键字声明的变量,称为模块级变量。 模块级变量在声明它的整个模块中的所有过程中都能使用,但其他模块过程却不能访问。一旦模块运行结束,模块变量的内容自动消失。,2模块范围,93, 全局变量 全局变量就是在标准模块的所有过程之外的起始位置定义的变量,运行时在所有类模块和标准模块的所有子过程与函数过程中都可见,在标准模块的变量定义区域,用下面的语句定义全局变量: Public 全局变量名 As 数据类型,8.6 过程调用和参数传递,8.6.4 变量作用域,94,例:如窗体所示,有三个同名变量,定义不用的作用域,观察其使用,8.6 过程调用和参数传递,8.6.4 变量作用域,95,8.6 过程调用与参数传递,8.6.5 变量的生存期,在过程中,用Dim关键字声明的局部变量属于动态变量。动态 变量的生存期是指:从变量所在的过程第一次执行,到过程 执行完毕,自动释放该变量所占的内存单元为止的这一段时间。,从变量的生存期来分,变量又分为动态变量和静态变量。,1动态变量,2静态变量,在过程中,用Static关键字声明的局部变量属于静态变量。静态变量在过程运行时可保留变量的值,即每次调用过程时,用Static说明的变量保持上一次的值。,96,8.6 过程调用与参数传递,例8-18 比较动态变量和静态变量的应用 窗体界面如图所示。代码如下: Private Sub Cmd1_Click() Dim x% Static y% x = x + 1 y = y + 1 b1.Caption = x b2.Caption = y End Sub 连续单出“开始”按钮5次,分析结果.,8.6.5 变量的生存期,97,要想快速、有效地管理好数据,开发出更具实用价值的Access数据库应用程序,应当了解和掌握VBA的数据库编程方法。,8.7 VBA的数据库编程,在VBA中主要提供了3种数据库访问接口: (1)开放数据库互联应用编程接口 (2)数据访问对象DAO (3)Active数据对象,8.7.1 数据库引擎及其接口,98,数据访问对象(DAO)是VBA提供的一种数据访问接口。包括数据库创建、表和查询的定义等工具,借助VBA代码可以灵活地控制数据访问的各种操作。 DAO模型是一个复杂的可编程数据关联对象的层次,DAO的对象层次说明如下:,8.7 VBA的数据库编程,8.7.2 数据访问对象(DAO),1DAO模型结构,99,8.7 VBA的数据库编程,100,要想使用DAO访问数据库的对象,首先应该增加一个对DAO库的引用。其引用设置方式为: (1)先进入VBA编程环境。 (2)执行“工具/引用”命令,在对话框的,单击“Microsoft DA03.6 object Library”列表项前面的复选框。 (4)单击“确定”按钮,完成设置。,8.7 VBA的数据库编程,2设置DAO库的引用,101,通过DAO编程实现据库访问时,首先要创建对象变量,然后通过对象方法和属性来进行操作。下面给出数据库操作一般语句和步骤: (1)创建对象变量 定义工作区对象变量:Dim ws As Workspace 定义数据库对象变量:Dim db As Database 定义记录集对象变量:Dim rs As RecordSet (2)通过Set语句设置各个对象变量的值 Set ws=DBEngine.Workspace(0) Set db=ws.OpenDatabase(数据库文件名) Set rs=db.OpenRecordSet(表名、查询名或SQL语句),8.7 VBA的数据库编程,3利用DAO访问数据库,102,(3)通过对象的方法和属性进行操作 通常使用循环结构处理记录集中的每一条记录。 Do While Not rs.EOF Rs.MoveNext Loop (4)操作的收尾工作 rs.close cn.close Set r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2025)汽车驾驶员(技师)考试题库及答案
- 安全运行考试题及答案
- 高粱定制酒采购合同模板(3篇)
- 高空作业车施工合同(3篇)
- 智能家居产品研发与工程咨询合同
- 融资担保反担保合同示范文本
- 事业单位聘用合同期限与员工职业生涯规划协议
- 空间科学观测-洞察及研究
- 面试编导笔试题目及答案
- 病理专业复试题库及答案
- 砂石料物资供应服务保障方案
- 顺丰转正考试题库及答案
- 2025至2030玉米糖浆行业产业运行态势及投资规划深度研究报告
- 2025年秋招:邮储银行笔试真题及答案(可下载)
- 走访礼品管理办法
- 2025年全国质量月活动知识竞赛题库及答案
- 2025年高考英语一卷读后续写+课件+-2026届高三英语上学期一轮复习专项
- 小学一年级劳动教育课外实践活动计划
- 园区废水排放管理办法
- 安全生产考核巡查办法全文
- 2025-2030中国程控交换机行业竞争战略规划与未来前景研究报告
评论
0/150
提交评论