第八章 模块.ppt_第1页
第八章 模块.ppt_第2页
第八章 模块.ppt_第3页
第八章 模块.ppt_第4页
第八章 模块.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章模块与VBA编程基础,余道丽,第八章 模块与VBA编程基础,Microsoft Access 具有强大的界面功能,这使得用户能够方便地建立各种对象。尤其是利用宏可以执行简单的任务,如对象的修改和数据的查找。但在某些情况下,用户需要利用模块提供强大的功能,完成更艰难的任务。,主要内容,模块的基本概念 创建模块 VBA程序设计基础及流程控制语句(重点),8.1 模块的基本概念,模块的基本概念 模块的分类 模块的组成,模块的基本概念,模块是由一种叫VBA(Visual Basic for Application)的语言来实现的。 VBA是微软公司将Visual Basic 的一部分代码结合到O

2、ffice中而形成的。 模块基本上是由声明语句和过程组成的集合,它们作为一个已命名的单元存储在一起,对VBA代码进行组织。,模块的分类,模块分为两种:类模块和标准模块 类模块:包括窗体模块(模块中包含在指定的窗体或其控件上事件发生时触发的事件过程的代码。)和报表模块(模块中包含由在指定报表或其控件上发生的事件触发的事件过程的代码) ,它们各自与某一特定窗体或报表相关联。 类模块可以调用标准模块中定义好的过程 作用范围限于所属窗体或报表内部,生命期也随窗体或报表的打开而开始、关闭而结束 标准模块:是指存放在整个数据库中可用的过程和函数的模块。,模块的组成,通常,模块是由以下两部分组成: 声明部分

3、:可以在这部分定义变量、常量、自定义类型和外部过程。在模块中,声明部分和过程部分是分割开来的,声明部分定义的常量和变量是全局的,可以被模块中的所有过程调用。 事件过程部分:这是一种自动执行的过程,用来对用户或者程序代码启动的事件或系统触发的事件做出响应,包括函数过程和子过程。,8.2 创建模块,1、在模块中加入过程 进入类模块编辑区:“代码”工具按钮或者窗体和报表的事件过程。 进入标准模块编辑区:“模块”“新建” 2. Sub子过程 可执行一系列操作,无返回值 可在该子过程之外用CALL显示调用 调用Call mysub(参数1,参数2,),3、Function函数 执行一系列操作,返回执行结

4、果 返回值直接利用函数名调用获得 调用x=myFuntion(参数),4、模块的创建 创建一个名为“模块入门”的新模块,5、过程的创建 在“模块入门”模块中创建一个Hello过程,VBA编程环境:VBE界面,工程窗口,属性窗口,代码窗口,标准工具条,过程选定器,对象选定器,VBA编程环境:如何进入VBE,进入VBE的基本方法 在数据库窗口单击“工具”“宏” “Visual Basic编辑器” 双击要查看或编辑的模块对象 新建一个模块对象 对窗体和报表,在设计视图中点击“代码”按钮 对窗体和报表,在设计视图中,点击某一控件的“事件属性”,8.3 VBA程序设计,一门程序设计语言应该怎么学? 掌握

5、语言的基本用途 掌握语言的基本构成 掌握语言的基本书写规范 掌握语言的数据类型、运算符、常用函数、基本语句结构、调用关系。 利用上述元素编写程序代码,逐步深化,一、面向对象程序设计的基本概念,一、对象与类 集合:含有相同属性的事物的总称称为集合,比如所有的学生就构成一个集合(类)。 对象:集合中的某一个实体,例如学生集合中的某一个学生就是一个对象。 类是一个抽象的整体概念 ,对象是类的实例化。 类与对象是面向对象程序设计语言的基础。 例:“学生”类,“张三” 对象,一、面向对象程序设计的基本概念,二、属 性(Property) 所有对象都有自己的属性。用来描述和反映对象特征的参数。如:控件名称

6、(Name)、标题(Caption)、颜色(Color)、字体(FontName)等属性决定了对象展现给用户的界面具有什么样的外观及功能。 对象属性设置的方法: 在设计模式下,通过属性窗口直接设置对象的属性。 在程序的代码中通过赋值实现,其格式为:对象.属性=属性值 例: Label10.Caption=“显示”,一、面向对象程序设计的基本概念,在VBA中引用ACCESS对象: 基本语法: Forms(或Reports)!窗体(或报表)名称!控件名称.属性名 注意要点 如果在通用模块或在一类模块中引用另一类模块的控件时,应该使用上述完整语法。 如果在类模块中引用自己窗体上的控件,仅采用下面语法

7、: 控件名称.属性名,在窗体Form1中引用窗体Form2上的Lable1控件: Forms!Form2!Lable1.Caption=“标签” 在窗体Form2上引用自己的Lable1控件 Lable1.Caption=“标签”,一、面向对象程序设计的基本概念,三、事件和事件过程 事件:可被对象识别的动作。如:窗体打开OnOpen,按钮的单击OnClick,双击OnDbClick等 事件过程:是指附在该对象上的程序代码,是事件触发后处理的程序。事件过程的形式如下: Sub 对象名_事件过程名(参数列表) . (事件过程代码) End Sub,例如: Sub cmdOk_Click() cmd

8、Ok.FontSize=20 设置命令按钮的字体大小为20 End Sub,一、面向对象程序设计的基本概念,四、方 法(Method) 方法:在对象上可操作的过程,是VB系统提供的一种特殊的过程和函数 方法是面向对象的,所以方法调用一般要指明对象。 对象方法调用形式: 对象.方法 参数列表 ,例如: DoCmd.OpenTable 学生和课程,二、VBA数据类型、常量、变量,本节内容及要求 1.熟悉VB程序中代码和语句书写规则 2.掌握VB的数据类型 3.掌握VB的运算符和表达式的使用 4.掌握常用内部函数的使用,编码规则,1.VBA代码中不区分字母的大小写。 2.一条语句写完后不需加任何结束

9、符。 3.同行上可以书写多条语句,语句间要用冒号“:”分隔。 4.若一个语句行不能写下全部语句时,可以换行。换行时需在本行后加入续行符,1个空格加下划线“_”。 5.一行最多允许255个字符。 6.注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。 7.函数和方法后应加上括号()。,编码规则举例,LABEL10与label10相同 x=y+z:y=z+x:z=y+x 在同一行书写了三个语句 Mover = “这是一个 _ & 例子说明如何 _ & 续行代码 空白加下划线 ( _) 可接续两行以上的代码。 4. This is a comment. () 引导注释文本 :R

10、em This is a comment Rem引导注释文本,一、数据类型 VBA提供了多种数据类型的支持,这样也是为了大家进行编程提供方便。 各种数据类型所占的存储空间、所表示数据范围大小、以及所支持的数据运算不同。 数据类型可以分为数值型、布尔型、日期型、字符型、对象型、变体型和用户自定义的数据类型。,二、 VBA数据类型、常量、变量,数据类型标准数据类型,数据类型-布尔型,布尔数据类型只有True和False两个值。 当其他的数值类型转化为布尔型时,0转化为False,其他转化为True。 当布尔型转化为其他的数值类型时, False转化为 0 , True转化为-1。,标识符:Bool

11、ean,数据类型-日期型,日期数据类型表示的范围为100年1月1日到9999年12月31日,时间从0:00:00到23:59:59 当其他数值类型转化为时间类型时,整数部分表示日期,小数部分表示时间。 “时间/日期”类型数据必须前后用“#”号封住。,标识符:Date,数据类型-变体型,变体数据类型所代表的数据类型是不确定的,可以成为任何类型的变量。 变体的数据类型的变量可以存储特殊值,如:Empty,Error,Nothing,Null等。 可以用 VarType 函数(变量类型)或 TypeName(类型名)函数来检查 Variant 中的数据实际类型。,标识符:Variant,数据类型-自

12、定义型,前面所介绍的数据类型都是原子型的数据类型,即不可以再分割的数据类型,使用Type语句可以定义任何结构型数据类型,如:,基本语法: Private | Public Type 类型名 元素名 As 数据类型 元素名 As 数据类型 End Type,例:定义学生类型数据 Public Type Students Name As String*8 Age As Integer End Type,声明变量: Dim Student As Students 引用数据: Student.Name=”张三” Student.Age=15,二、 VBA数据类型、常量、变量,标识符 程序中常量、变量、

13、过程等对象的名字,VBA标识符规定: 第一个字符必须是字母或下划线(_) 包含的字符数不超过255个 不得与VBA的关键字同名,如不能使用Sub、For等 不能含有空格或除了下划线外的任何其他符号 从增强程序可读性角度出发,标识符应使人望文生义,了解其代表的内涵。,二、 VBA数据类型、常量、变量,二、常量 在程序运行过程中,其值不能被改变的量称为常量。VBA中有三类常量: 普通常量、符号常量 、系统常量 普通常量 整型常量:10、110%(Integer)、23&(Long) 实型常量:0.123!(Single)、-1.123#、1.25E+3、-1.25E-3 字符串常量:“ABD”、“

14、XYZ、”大家好” 逻辑常量:ture、false 日期常量:#2002-5-4 14:30:00 PM#、#09/02/99#,二、 VBA数据类型、常量、变量,符号常量 在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。 声明符号常量,基本语法如下 Const 常量名 As 类型 | 类型符号=常数,例如: Const PI#=3.1415926535 等价于: Const PI As Double=3.1415926535,二、 VBA数据类型、常量、变量,系统常量 VBA系统提供了应用程序和控件的系统定义常数。它

15、们存放于系统的对象库中,在“对象浏览器”中能查看这些常数。,二、 VBA数据类型、常量、变量,三、变量 程序中的变量为临时存在单元,是程序运行时值可以发生变化的数据。可存放文字、数值、日期和对象属性。每个变量都有一个名字,程序通过变量名对变量进行存取操作。 在VBA中不必先声明变量再使用变量,但是先声明再使用是良好编程的习惯。 变量的数据类型可以是前面所介绍的数据类型中的任何一种,也可以是用户自定义的数据类型。,变量-变量声明,语法: 1、Dim 变量名 AS 类型或Dim 变量名类型符 2、声明的每个变量都要一个单独的 As 类型 子句,没有的作为变体类型( Variant ),例1:Dim

16、 iCount As integer , sum As single 等价于:Dim iCount%, sum! 例2:Dim iCount As integer , sum,name as string*10,隐式变量声明,VBA允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。VBA根据程序中赋予变量的值来自动调整变量的类型,例如:变量a, b, Sum都没有事先定义。 Private Sub Form_Click() Sum = 0 a = 10: b = 20 Sum = a + b deb

17、ug.Print Sum=“& Sum End Sub,强制显式声明变量,良好的编程习惯都应该是“先声明变量,后使用变量”, 这样做可以提高程序的效率,同时也使程序易于调试。VBA 中可以强制显式声明,在窗体模块、标准模块和类模块的通 用声明段中加入:Option Explicit,变量的作用域和生命周期,VBA中,变量定义的位置和方式不同,则变量存在的时间和起作用的范围也有所不同,即变量的作用域与生命期。 变量作用域的三个层次:局部范围(过程级别)、模块范围、全局范围,变量的作用域和生命周期,局部范围(过程级别):定义在过程中的变量。 定义方式:Dim x As Singl Static y

18、 As single 用Dim 定义的局部变量只有在它所在的过程运行时才会有值 Static定义的局部变量在整个程序运行期间均有值,所以它可以作为中间变量保存结果。,变量的作用域和生命周期,2、模块范围(Private ):在模块中,过程外定义的变量,其存在的范围在整个模块内。 3、全局范围(Public):定义在标准模块的所有过程外部的起始位置,存在于所有类模块和标准模块。一般函数默认为PublicAs语句来声明。,变量的作用域和生命周期举例,三、数组,数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代

19、表元素在数组中的位置。 数组分为两类:固定数组和动态数组,固定数组的容量是固定的,动态数组的容量是可以改变的。,数组-固定数组,语法 Dim “数组名(n)” As “类型” 说明 括号中n代表数组的上界,默认的下界为0,这样的数组容量为n+1。 如果要以1为下界,可以用“1 to n”代替括号中的n,如果要定义多维数组,可以用“n1,n2”代替括号中的n。,例如 Dim NewArray15 As integer Dim NewArray23 to 6 As integer Dim NewArray33 , 5 As integer Dim NewArray3 to 6,5 As integ

20、er,数组-动态数组,声明语法: Dim “数组名( )” As “类型” 说明 括号中没有任何参数。 定义数组大小和唯数 ReDim Preserve “数组名(n)” As “新类型” 说明 如果有Preserve,则数组原有的数据可以保留,否则在数组重新声明是不保留原有数据,如果变量声明为“Variant”,则在ReDim中可以重新设定类型,否则不能改变类型。,动态数组举例,例1:利用Redim改变数据 维数和大小。 Sub arraychange() Dim x( ) as integer ReDim x(20) x(20) = 30 debug.Print x(20) ReDim x

21、(30) Debug.Print x(20) End sub,例2:利用Preserver保留 数组中的值。 Sub arraychange() Dim x( ) as integer ReDim x(20) x(20) = 30 debug.Print x(20) ReDim Preserve x(30) debug.Print x(20) End sub,四、常用标准函数,数学函数:abs()、int()、fix()、sin()、cos() 字符串函数:instr()、left()、right()、mid() 日期/时间函数:date()、time()、now()、year() month

22、()、day()、weekday() 类型转换函数:asc()、chr()、str()、val(),五、运算符,算术运算符: + 、 - 、*、 / 、 、 Mod 关系运算符:=、 、= 、 逻辑运算符:AND、OR、NOT 连接运算符:&、+,六、表达式和优先级,将常量和变量用各种运算符连接在一起构成的式子就叫表达式。,七、VBA程序流程控制语句,1.VBA程序语句按照功能不同分为: 声明语句:用于给变量、常量或者过程定义命名。 执行语句:用于执行赋值操作、调用过程、实现各种流程控制。 2.执行语句分类: 顺序结构:按照语句的顺序顺次执行。 条件结构:又称选择结构,根据条件选择执行。 循环

23、结构:重复执行某一段程序。,条件语句,IfThenEnd If语句 语句结构: 结构一 结构二,If Then Else If Then Else End If End If,If Then ElseIf Then Else End If,条件语句,2. Select CaseEnd Select语句 语句结构:,Select Case Case Case Case Is Case Else End Select,程序段: Dim score as integer Dim m as integer Dim str as string M=score/10 Select case m case

24、9 to 10 str=“优秀” case 6 to 8 str=“合格” case Is 6 str=“不合格” case else str=“旷考” End select,条件语句,3. IIf语句 语句结构:IIf(条件式,表达式1,表达式2),4. Switch语句 语句结构: Switch(条件式1,表达式1,条件式n,表达式n),5. Choose语句 语句结构: Choose(索引式,选项1,选项n),Max=IIf(ab,a,b),y= Switch(x0,1,x=0,0,x0,-1),y= Choose(x,5,m+1,n),条件语句,6. 条件语句综合实例,例8.9 设计一

25、个登陆窗体,用户名和密码为空给出提示,正确的时候给出“欢迎使用”信息。,循环语句,1. ForNext 格式:For 循环变量=初值 To 终值 Step 步长 循环体 条件语句系列 Exit For 结束条件语句系列 Next 循环变量,步长取值说明看P230,例子 计算1100所有整数的和,Do While 条件式 循环体 条件语句系列 Exit Do 结束条件语句系列 Loop While 条件式,循环语句,2. DOWhile(或者Until)Loop 格式:,Do While 条件式 循环体 条件语句系列 Exit Do 结束条件语句系列 Loop,例子 计算1100所有整数的和,8

26、.3.5 过程调用和参数传递,一、子过程的定义和调用 定义格式: Public|PrivateStatic Sub 子过程名() 语句块 Exit Sub 子过程语句 End Sub,使用Public关键字可以使该过程适用于所有模块中的所有其他过程;使用Private关键字可以使该子过程只适用于同一个模块中的其他过程,8.3.5 过程调用和参数传递,调用过程有以下两种格式: 格式1:call 过程名(实参列表) 格式2:子过程名 实参列表 注:这里过程名后的参数叫实际参数。,8.3.5 过程调用和参数传递,二、函数过程的定义和调用 定义格式: Public | PrivateStaticFun

27、ction 函数过程名 形参As数据类型 函数过程语句 函数过程语句表达式 Exit Function 函数过程语句 函数过程语句=表达式 End Function,8.3.5 过程调用和参数传递,函数过程的调用格式只有一种: 函数过程名(实参) 编写一个求解圆面积的函数过程。,8.3.5 过程调用和参数传递,三、参数传递 在函数的调用过程中,一般会发生数据的传递,即将主调过程中的实参传给被调过程的形参。 在参数传递过程中,可以有传址和传值两种形式。 1传址 如果在定义过程或函数时,形参的变量名前不加任何前缀,即为传址;若加前缀,须在形参变量名前加ByRef。 传递过程是:调用过程时,将实参的

28、地址传给形参。因此如果在被调过程或函数中修改了形参的值,则主调过程或函数中实参的值也跟着变化。,8.3.5 过程调用和参数传递,例如:如果输入5和7,程序的结果会是多少?,Public Sub swap(x As Integer, y As Integer) Dim t As Integer t = x: x = y: y = t end Sub 按钮的单击事件如下: Private Sub Command0_Click() Dim x As Integer, y As Integer x = 3 y = 5 Debug.Print x, y swap x, y Debug.Print x, y End Sub,8.3.5 过程调用和参数传递,2传值 如果在定义过程或函数时,形参的变量名前加ByVal前缀,即为传值。这时主调过程将实参的值复制后传给被调过程的形参,因此如果在被调过程或函数中修改了形参的值,则主调过程或函数中实参的值不会跟着变化。,8.3.5 过程调用和参数传递,例如:如果输入5和7,程序的结果会是多少?,Public Sub swap(ByVal x As Int

温馨提示

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

评论

0/150

提交评论