VBA内模块怎么学习,我找书籍都没有关于VBA内模块的相关书籍。

VBA类模块完全教程_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VBA类模块完全教程
&&带目录文档,方便阅读。
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩34页未读,
定制HR最喜欢的简历
你可能喜欢当前位置: >>
模块与VBA程序设计
第十章 模块与VBA 模块与VBA程序设计 VBA程序设计 10.1 模块和过程的创建模块是Access数据库7 模块是Access数据库7个 Access数据库 对象之一, 对象之一,其实质就是没有界 面的VBA程序。 VBA程序 面的VBA程序。模块具有很强 的通用性,窗体、 的通用性,窗体、报表等对象 都可以调用模块内部的过程。 都可以调用模块内部的过程。 模块基本上是由声明、 模块基本上是由声明、语 声明 句和过程组成的集合 的集合, 句和过程组成的集合,它们作 为一个已命名的单元存储在一 VBA代码进行组织 代码进行组织。 起,对VBA代码进行组织。 有两种类型的模块: Access 有两种类型的模块: 标准模块和类模块。 标准模块和类模块。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.1 模块和过程的创建类模块? ??包括窗体模块(模块中包含在指定的 包括窗体模块( 窗体模块 窗体或其控件上事件发生时触发的 事件过程的代码。 报表模块( 事件过程的代码。)和报表模块(模 块中包含由在指定报表或其控件上 发生的事件触发的事件过程的代 它们各自与某一特定窗体 码。) ,它们各自与某一特定窗体 或报表相关联。 或报表相关联。 ? ??类模块可以调用标准模块中定义好 的过程 ? ??作用范围限于所属窗体或报表内部, 作用范围限于所属窗体或报表内部, 限于所属窗体或报表内部 生命期也随窗体或报表的打开而开 生命期也随窗体或报表的打开而开 始、关闭而结束二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.1 模块和过程的创建 标准模块? ??标准模块包含的是通用过程和常用过 标准模块包含的是通用过程和常用过 这些通用过程不与任何对象相关 程,这些通用过程不与任何对象相关 联,常用过程可以在数据库中的任何 位置运行。 位置运行。类模块可以调用标准模块 中定义好的过程 ? ??标准模块中的公共变量和公共过程具 全局特性,作用范围在整个应用程 有全局特性,作用范围在整个应用程 生命期伴着应用程序运行而开始 伴着应用程序运行而开始、 序,生命期伴着应用程序运行而开始、 关闭而结束二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.1 模块和过程的创建 模块的基本组成单元―过程 模块的基本组成单元 过程???Sub子过程 Sub子过程 Sub? 可执行一系列操作,无返回值 可执行一系列操作, ? 可在该子过程之外用CALL显示调用 可在该子过程之外用CALL显示调用 CALL ? 调用Call mysub(参数1,参数2,…) 参数1 参数2 调用Call mysub(参数 )Sub mysub(参数 ,参数 ,…) 参数1,参数2, 参数 变量声明部分 操作语句部分 End Sub???Function函数 Function函数 Function? 执行一系列操作,返回执行结果 执行一系列操作, ? 返回值直接利用函数名调用获得 返回值直接利用函数名调用获得 函数名调用 ? 调用x=myFuntion(参数) 调用x=myFuntion(参数) x=myFuntion(参数Function myFunction(参数 参数) 参数 变量声明部分 操作语句部分 End Function 二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.1 模块和过程的创建 模块的创建创建一个名为“模块入门” 创建一个名为“模块入门”的新模块保存为“模块入门” 保存为“模块入门”二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.1 模块和过程的创建 过程的创建在“模块入门”模块中创建一个Hello过程 模块入门”模块中创建一个Hello过程 Hello双击用户输入执行过程二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.2 VBA编程环境:VBE界面 VBA编程环境 VBE界面 编程环境:对象选定器 过程选定器工程 窗口代码 窗口属性 窗口立即 窗口二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.2 VBA编程环境:VBE界面 VBA编程环境 VBE界面 编程环境:运行子过程/ 运行子过程 用户窗体 插入模块 ACCESS视图 ACCESS视图 中断 重新设定工程管理器属性窗口对象浏览器显示出对象库以及工 程里过程中的可用类 可用类、 程里过程中的可用类、属 方法、 性、方法、事件及常数变 量。可以用它来搜索及使 用既有的对象, 用既有的对象,或是来源 于其他应用程序的对象。 于其他应用程序的对象。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.2 VBA编程环境:如何进入VBE VBA编程环境 如何进入VBE 编程环境:进入VBE 进入VBE的基本方法 VBE的基本方法在数据库窗口单击“工具” 在数据库窗口单击“工具”→“宏” →“Visual Basic 编辑器” 编辑器” 双击要查看或编辑的模块对象 新建一个模块对象 对窗体和报表,在设计视图中点击“代码” 对窗体和报表,在设计视图中点击“代码”按钮 对窗体和报表,在设计视图中,点击某一控件的“ 对窗体和报表,在设计视图中,点击某一控件的“事件属 性”二级ACCESS―模块与VBA 模块与VBA 模块与 二级 VBA程序设计 VBA程序设计 一门程序设计语言应该怎么学? 一门程序设计语言应该怎么学???掌握语言的基本用途 掌握语言的基本用途 ???掌握语言的基本构成 掌握语言的基本构成 ???掌握语言的基本书写规范 掌握语言的基本书写规范 ???掌握语言的数据类型、运算符、常用函数、基本语 掌握语言的数据类型、运算符、常用函数、 掌握语言的数据类型 句结构、调用关系。 句结构、调用关系。 ???利用上述元素编写程序代码,逐步深化 利用上述元素编写程序代码, 利用上述元素编写程序代码二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.3 面向对象编程基本概念 一、对象与类???对象:对象是基本的运行时的实体,如窗体、报表、各种 对象:对象是基本的运行时的实体, 窗体、报表、 对象控件等,包括作用于对象的操作(方法) 控件等,包括作用于对象的操作(方法)和对象的响应 事件)。将数据和处理这些数据的过程封装在一起。 )。将数据和处理这些数据的过程封装在一起 (事件)。将数据和处理这些数据的过程封装在一起。???类:一个抽象的整体概念 ,对象是类的实例化。 类 对象是类的实例化。 ???类与对象是面向对象程序设计语言的基础。 类与对象是面向对象程序设计语言的基础。 类与对象是面向对象程序设计语言的基础 ???例:“学生”→类,“张三” →对象 例 学生” 类 张三” 对象二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.3 面向对象编程基本概念 二、属 性(Property) Property)所有对象都有自己的属性。 所有对象都有自己的属性。用来描述和反映对象特征的参 数。如:控件名称(Name)、标题(Caption)、颜色(Color)、 控件名称(Name)、标题(Caption)、颜色(Color)、 (Name) (Caption) (Color) 字体(FontName)等属性决定了对象展现给用户的界面具有什 字体(FontName)等属性决定了对象展现给用户的界面具有什 (FontName) 么样的外观及功能。 么样的外观及功能。 ? ??对象属性设置的方法: 对象属性设置的方法:? 在设计模式下,通过属性窗口直接设置对象的属性。 在设计模式下,通过属性窗口直接设置对象的属性。 属性窗口直接设置对象的属性 ? 在程序的代码中通过赋值实现,其格式为:对象.属性=属性值 在程序的代码中通过赋值实现,其格式为:对象.属性= 赋值实现 Label10.Caption=“显示 显示” 例: Label10.Caption= 显示”二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.3 面向对象编程基本概念? ??在VBA中引用ACCESS对象: VBA中引用ACCESS对象 中引用ACCESS对象:? 基本语法: 基本语法: Forms(或Reports)!窗体 或报表 名称 控件名称 属性名 或 窗体(或报表 名称!控件名称 属性名] 窗体 或报表)名称 控件名称[.属性名 ? 注意要点C如果在通用模块或在一类模块中引用另一类模块的控件时, 如果在通用模块或在一类模块中引用另一类模块的控件时, 如果在通用模块或在一类模块中引用另一类模块的控件时 应该使用上述完整语法。 应该使用上述完整语法。 C如果在类模块中引用自己窗体上的控件,仅采用下面语法: 如果在类模块中引用自己窗体上的控件,仅采用下面语法: 如果在类模块中引用自己窗体上的控件 控件名称[.属性名 控件名称 属性名] 属性名例如:在窗体 中引用Form2上的 上的Label1控件 例如:在窗体Form1中引用 中引用 上的 控件 Forms!Form2!Label1.Caption=“教师信息表” 教师信息表” 教师信息表 在引用Form2上引用自己的Label1 Form2上引用自己的Label1控件 在引用Form2上引用自己的Label1控件 Label1.Caption=“教师信息表 教师信息表二级ACCESS―模块与VBA 模块与VBA 模块与 二级 基本控件常用属性属性 Name Caption Controlsource Decimalplaces Defaulvalue Visible Scrollbars Height、Width 、 Left、Top 、 Backstyle Backcolor fontName、FontSize 、 Enabled Text 说明 名称) (名称)返回或设定对象的名字 标题) (标题)返回或设定对象的标题文字 数据源) (数据源)指定控件显示的数据源 格式) (格式)指定显示的小数位数 默认值) (默认值)设定控件的默认值 可见性)控件或窗体、 (可见性)控件或窗体、报表是否可见 (滚动条)窗体或组合框上的滚动条 滚动条) (高、宽)设定控件的大小 右边距) (左、右边距)设定控件在窗体或报表中的位置 背景样式)指定控件是否透明:常规为1 透明为0 (背景样式)指定控件是否透明:常规为1,透明为0 背景颜色) (背景颜色)指定控件或节的颜色 字体名称、字体大小) (字体名称、字体大小)设定字体及字体大小 控件是否接受焦点和响应用户操作 设置或返回文本框、 设置或返回文本框、组合框中的文本 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 10.3 面向对象编程基本概念 三、事件(Event)及事件过程(Event Procedure)? ??事件:可被对象识别的动作。如:窗体打开OnOpen,按钮的单 事件:可被对象识别的动作。 窗体打开OnOpen OnOpen,OnClick,双击OnDbClick OnDbClick等 击OnClick,双击OnDbClick等? ??事件过程:是指附在该对象上的程序代码,是事件触发后 事件过程:是指附在该对象上的程序代码, 处理的程序。事件过程的形式如下: 处理的程序。事件过程的形式如下:Sub 对象名 事件过程名 (参数列表)] 对象名_事件过程名 参数列表) 事件过程名[( ….. (事件过程代码) 事件过程代码) 事件过程代码 End Sub 例如: 例如: Sub cmdOk_Click() cmdOk.FontSize=20 ’设置命令按钮的字体大小为 设置命令按钮的字体大小为20 设置命令按钮的字体大小为 End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.3 面向对象编程基本概念 四、方 法(Method) Method)? ??方法:在对象上可操作的过程,是VB系统提供的一种特 方法:在对象上可操作的过程, VB系统提供的一种特殊的过程和函数 ? ??方法是面向对象的,所以方法调用一般要指明对象。 方法是面向对象的,所以方法调用一般要指明对象。 ? ??对象方法调用形式:[ 对象.]方法[ 参数列表 ] 对象方法调用形式: 对象.]方法[ .]方法例如: 例如: Debug.print &欢迎您使用 欢迎您使用ACCESS & 欢迎您使用‘在立即窗口中打印出文字 在立即窗口中打印出文字二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、本节内容及要求?.1 ??熟悉VB程序中代码和语句书写规则 1.熟悉VB程序中代码和语句书写规则 熟悉VB ?.2 ??掌握VB的数据类型 2.掌握VB的数据类型 掌握VB ?.3 ??掌握VB的运算符和表达式的使用 3.掌握VB的运算符和表达式的使用 掌握VB ?.4 ??掌握常用内部函数的使用 4.掌握常用内部函数的使用二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、编码规则?.1 ??VBA代码中不区分字母的大小写。 1.VBA代码中不区分字母的大小写。 代码中不区分字母的大小写 ?.2 ??一条语句写完后不需加任何结束符。 2.一条语句写完后不需加任何结束符。 一条语句写完后不需加任何结束符 ?.3 ??同行上可以书写多条语句,语句间要用冒号“:”分隔。 3.同行上可以书写多条语句,语句间要用冒号“ 分隔 分隔。 同行上可以书写多条语句 ?.4 ??若一个语句行不能写下全部语句时,可以换行。换行时 4.若一个语句行不能写下全部语句时,可以换行。 若一个语句行不能写下全部语句时 需在本行后加入续行符 续行符, 空格加下划线“ 。 需在本行后加入续行符,1个空格加下划线“_”。 ?.5 ??一行最多允许255个字符。 5.一行最多允许255个字符。 一行最多允许255个字符 ?.6 ??注释以Rem开头,也可以使用单引号“'”,注释内容可 6.注释以Rem开头,也可以使用单引号“ , 注释 开头 直接出现在语句的后面。 直接出现在语句的后面。 ?.7 ??在程序转向时需用到标号,标号是以字母开始而以冒号 7.在程序转向时需用到标号,标号是以字母开始而以冒号 时需用到标号 结束的字符串。 结束的字符串。 ?.8 ??函数和方法后应加上括号()。 8.函数和方法后应加上括号()。 函数和方法后应加上括号二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、编码规则举例? ??LABEL10与label10相同 LABEL10与label10相同 ? ??x=y+z:y=z+x:z=y+x 在同一行书写了三个语句? ??MyVar = “这是一个 & _ 这是一个 & “例子说明如何 & _ 例子说明如何 & “续行代码“ 空白加下划线 ( _) 可接续两行以上的代码。 续行代码“ 可接续两行以上的代码。 续行代码 ? ‘ ??This is a comment. (’) 引导注释文本 ) Rem This is a comment Rem引导注释文本 Rem引导注释文本 ? ??If Number = 1 Then GoTo Line1 Else GoTo Line2 End if 标号1 Line1:标号1 标号 MyString = “数值等于 数值等于1“ 数值等于 Line2:标号2 标号2 标号 MyString = &数值等于 数值等于2& 数值等于二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、数据类型- 数据类型-标准数据类型类型Byte(单字节型) Byte(单字节型) Integer(整型) Integer(整型) Long(长整型) Long(长整型) Single(单精度型) Single(单精度型) Double(双精度型) Double(双精度型) Currency(货币型) Currency(货币型) String(字符型) String(字符型) Boolean(布尔型) Boolean(布尔型) Date(日期型) Date(日期型) Variant(变体型) Variant(变体型) Object(对象型) Object(对象型)类型符无 % & ! # @ $ 无 无 无 无字段类型字节/整数 是否 字节 整数/是否 整数 长整型/自动编号 长整型 自动编号 单精度数 双精度数 货币 文本 是/否 否 日期/时间 日期 时间 任何字节1 2 4 4 8 8 n*1 2 8 按需分配4 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、数据类型的对比在Access中,有4 字段数据类型 Access中 种不同的编辑环境需要 Yes/No Number(Byte) 用户指定数据类型― 用户指定数据类型―表 AutoNumber(Long Integer) 设计视图、查询参数、 设计视图、查询参数、 Currency VBA代码 SQL查询视图 代码、 查询视图。 VBA代码、SQL查询视图。Date/Time 数据类型与VBA VBA数据 其数据类型与VBA数据 Number(Double) 类型对比,如右图所示。 类型对比,如右图所示。OLE ObjectVBA数据类型 VBA数据类型 Boolean Byte Long Currency Date Double String AutoNumber/GVI(同步复制ID ID) AutoNumber/GVI(同步复制ID) 不支持 Memro string Number(Single) Single Number(Integer) Integer Text String Hyper Link String 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 不支持 Variant 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、数据类型之间的转换在进行VBA编程过程中, 在进行VBA编程过程中,用户可以将一种数据类型的数据 VBA编程过程中 转换成另一种特定类型的数据。 转换成另一种特定类型的数据。 函数名Cbyte Cint Clng Csng Cdbl Ccur Cdate Cvar Cbool Cstr目标类型Byte Integer Long Single Double Currency Date Varriant Boolean String例Cbyte(125. 舍入小数到整数 Cint(1.35)=1, Cint(1.55)=2 四舍五入 , Clng(1.35)=1 Csng(125)=125.0 Cdbl(125)=125.0 Cdate(“”)=## CBool(0)=false Cstr(125.25)=“125.25” 二级 二级ACCESS―模块与VBA 模块与VBA 模块与 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、数据类型-自定义类型 数据类型-在模块级别中使用,用于定义包含一个或多个元 在模块级别中使用,用于定义包含一个或多个元 的用户自定义的数据类型。 素的用户自定义的数据类型。基本语法: 基本语法: [ 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二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、标准数据类型要点? ??Boolean 数据类型:值只能是 True 或是 False。当转 数据类型: False。 值时, False, 换其他的数值类型为 Boolean 值时,0 会转成 False, 而其他的值则变成 True。当转换 Boolean 值为其他的 True。 数据类型时, 数据类型时,False 成为 0,而 True 成为 -1。 ? ??Date 数据类型:日期须以数字符号 (#) 扩起来,例如, 数据类型: 扩起来,例如, #-23# ? ??Object 数据类型:利用 Set 语句,声明为 Object 的 数据类型: 语句, 变量可以赋值为任何对象的引用。 变量可以赋值为任何对象的引用。 ? ??Variant 数据类型:所有没被显式声明(用如Dim、 数据类型 所有没被显式声明(用如Dim、 所有没被显式声明 Dim Private、Public或Static等语句 等语句) Private、Public或Static等语句)为其他类型变量的数 据类型。 据类型。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、 ???Variant 数据类型 Variant? Variant 是一种特殊的数据类型,除了定长 String 数 是一种特殊的数据类型, 包含任何种类的数据, 据及用户定义类型外,可以包含任何种类的数据 据及用户定义类型外,可以包含任何种类的数据,以及 Empty、Error、 Null等特殊值 等特殊值。 Empty、Error、Nothing 及 Null等特殊值。可以用 函数(变量类型) TypeName(类型名 类型名) VarType 函数(变量类型)或 TypeName(类型名)函数来 中的数据实际类型。 检查 Variant 中的数据实际类型。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、标识符程序中常量、变量、过程等对象的名字,VBA标 程序中常量、变量、过程等对象的名字,VBA标 识符规定: 识符规定:? ??第一个字符必须是字母或下划线(_) 第一个字符必须是字母或下划线(_) ? ??包含的字符数不超过255个 包含的字符数不超过255个 255 ? ??不得与VBA的关键字同名,如不能使用Sub、For等 不得与VBA的关键字同名,如不能使用Sub、For等 VBA的关键字同名 Sub ? ??不能使用下列字符:! 不能使用下列字符: @ & $ # (空格) 空格) ? ??从增强程序可读性角度出发,标识符应使人望文生义,了 从增强程序可读性角度出发,标识符应使人望文生义, 解其代表的内涵。 解其代表的内涵。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、常 量在程序运行过程中,其值不能被改变的量称为常 在程序运行过程中,其值不能被改变的量称为常 不能被改变 VBA中有三类常量 普通常量、 中有三类常量: 量。VBA中有三类常量: 普通常量、符号常量 、系 统常量 ? ??普通常量?整型常量:10、110%(Integer)、23&(Long) 整型常量: 、 、 整型常量 ?实型常量:0.123!(Single)、-1.123#、1.25E+3、-1.25E-3 实型常量: 实型常量 、 、 、 ?字符串常量:“ABD”、“XYZ、”大家好” 字符串常量: 字符串常量 、 、 大家好” ?逻辑常量:ture、false 逻辑常量: 逻辑常量 、 ?日期常量:# 14:30:00 PM#、#09/02/99# 日期常量: 日期常量 、二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、???符号常量在程序中,某个常量多次被使用, 在程序中,某个常量多次被使用,则可以使用 一个符号来代替该常量,这样不仅在书写上方便, 一个符号来代替该常量,这样不仅在书写上方便, 而且有效地改进了程序的可读性和可维护性。 而且有效地改进了程序的可读性和可维护性。?关键字 关键字Const 声明符号常量,基本语法如下 声明符号常量, 关键字 Const 常量名 [As 类型 | 类型符号 常数表达式 类型符号]=常数表达式例如: 例如:Const PI#=3. 等价于: 等价于: Const PI As Double=3.二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、???系统常量VBA系统提供了应用程序和控件的系统定义常数。 VBA系统提供了应用程序和控件的系统定义常数。 系统提供了应用程序和控件的系统定义常数 它们存放于系统的对象库中, 对象浏览器” 它们存放于系统的对象库中,在“对象浏览器”中 能查看这些常数。 能查看这些常数。颜色常数 常数 vbBlack vbRed vbGreen vbYellow vbBlue vbMagenta vbCyan vbWhite 值 描述 0x0 黑色 0xFF 红色 0xFF00 绿色 0xFFFF 黄色 0xFF0000 蓝色 0xFF00FF 紫红色 0xFFFF00 青色 0xFFFFFF 白色 常数 vbUseSystem vbSunday vbMonday vbTuesday vbWednesday vbThursday vbFriday 星期常数 值 描述 0 1 星期日 2 星期一 3 星期二 4 星期三 5 星期四 6 星期五vbSaturday 7 星期六 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、变 量程序中的变量为临时存在单元,可存放文字、数值、 程序中的变量为临时存在单元,可存放文字、数值、 日期和对象属性。每个变量都有一个名字, 日期和对象属性。每个变量都有一个名字,程序通过变量 名对变量进行存取操作。 名对变量进行存取操作。???用Dim语句显式声明变量 用Dim语句显式声明变量1、Dim 变量名 [AS 类型 或 Dim 变量名 类型符 、 类型] 变量名[类型符 类型符] 2、声明的每个变量都要一个单独的 As 类型 子句,没有的作为 、 子句, 变体类型( 变体类型( Variant ) 例1:Dim iCount As integer , sum As single : 等价于: 等价于:Dim iCount%, sum! 例2:Dim iCount As integer , sum,name as string*10 : , 则声明了两个变量,其中 为整型, 二级ACCESS―模块与 则声明了两个变量,其中icount为整型,sum为变体型 模块与VBA 为整型 二级 为变体型 模块与VBA 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、???隐式声明变量 隐式声明变量VBA允许用户在编写应用程序时, VBA允许用户在编写应用程序时,不声明变量而直 允许用户在编写应用程序时 接使用,系统临时为新变量分配存储空间并使用, 接使用,系统临时为新变量分配存储空间并使用,这 就是隐式声明。所有隐式声明的变量都是Variant Variant数据 就是隐式声明。所有隐式声明的变量都是Variant数据 类型。VBA根据程序中赋予变量的值来自动调整变量的 类型。VBA根据程序中赋予变量的值来自动调整变量的 类型。 类型。例如:变量 都没有事先定义。 例如:变量a, b, Sum都没有事先定义。 都没有事先定义Private Sub Form_Click() Sum = 0 a = 10: b = 20 Sum = a + b debug.Print &Sum=“& Sum End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、???强制显式声明变量 Option Explicit 强制显式声明变量―Option 强制显式声明变量良好的编程习惯都应该是“先声明变量, 良好的编程习惯都应该是“先声明变量,后使用 变量” 这样做可以提高程序的效率, 变量”,这样做可以提高程序的效率,同时也使程序 易于调试。VBA中可以强制显式声明 在窗体模块、 中可以强制显式声明, 易于调试。VBA中可以强制显式声明,在窗体模块、标 准模块和类模块的通用声明段中加入: 准模块和类模块的通用声明段中加入:Option Explicit二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、变量的作用域和生命周期VBA中 变量定义的位置和方式不同, VBA中,变量定义的位置和方式不同,则变量 存在的时间和起作用的范围也有所不同 也有所不同, 存在的时间和起作用的范围也有所不同,即变量 作用域与生命期。 的作用域与生命期。 变量的可见性:即可对变量进行操作的状态。 变量的可见性:即可对变量进行操作的状态。 变量作用域的三个层次:局部范围( 变量作用域的三个层次:局部范围(过程级 别)、模块范围、全局范围 )、模块范围、 模块范围二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.4 VBA数据类型、常量、变量 VBA数据类型 常量、 数据类型、 ???局部范围(过程级别):定义在模块的过程内部,只 局部范围(过程级别):定义在模块的过程内部 模块的过程内部, 局部范围有在声明此变量的过程中才可使用? 定义方式:Dim x As Singl Static y As single 定义方式: ? 用Dim 定义的局部变量只有在它所在的过程运行时才会有值 ? Static定义的局部变量在整个程序运行期间均有值,所以它可以 Static定义的局部变量在整个程序运行期间均有值, 定义的局部变量在整个程序运行期间均有值 作为中间变量保存结果。 作为中间变量保存结果。???模块范围(Private ):定义在模块的所有过程外部的起 模块范围( 定义在模块的所有过程外部的起 模块范围始位置,运行时在模块所包含的所有子过程和函数中可见。 始位置,运行时在模块所包含的所有子过程和函数中可见。???全局范围(Public):定义在模块的所有过程外部的起始 全局范围( 定义在模块的所有过程外部的起始 全局范围位置, 位置,运行时在所有类模块和标准模块的所包含的所有子 过程和函数过程中都见。一般函数默认为Public 过程和函数过程中都见。一般函数默认为Public二级ACCESS―模块与VBA 模块与VBA 模块与 二级 变量的作用域和生命周期举例x全局变量 y过程变量 z过程静态变量y 范 围x 范 围z 范 围二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.5 数组数组并不是一种数据类型, 数组并不是一种数据类型,而是一组相同类型 并不是一种数据类型 数据的集合。用一个统一的名字(数组名) 数据的集合。用一个统一的名字(数组名)代表逻 辑上相关的一批数据,每个元素用下标变量来区分; 下标变量来区分 辑上相关的一批数据,每个元素用下标变量来区分; 下标变量代表元素在数组中的位置。 下标变量代表元素在数组中的位置。 一维数组(线状) 一维数组(线状)? ??Public/Private/Static/Dim 数组名 ([下界 To [上界 [As 数据类型 下界] 上界]) 数据类型] 下界 上界 ?[ ??下界]和[上界]不能使用变量,必须是常量,一般是整型常量。 下界] 上界]不能使用变量,必须是常量,一般是整型常量。例如: 例如:Dim Workers(8) As Integer 未定义下界,下届默认为 , 未定义下界,下届默认为0,有0~8共9个元素 ~ 共 个元素 Dim Workers(1 To 8) As Integer 下届为1,上届为8, 下届为 ,上届为 ,有1~8共8个元素 ~ 共 个元素二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.5 数数组的引用组???数组必须先定义后使用 数组必须先定义后使用 ???使用形式:数组名(下标) 使用形式: 使用形式 数组名(下标) ???下标可以是整型变量、常量或表达式。 下标可以是整型变量、 下标可以是整型变量 常量或表达式。 ???引用不能下标越界 引用不能下标越界通常可以通过一个For循环处理数组 通常可以通过一个For循环处理数组 ForDim Numbers(1 To 10) As Integer Dim I As Integer For I=1 To 10 Numbers(I)=30 Next I 30 30 30 30 30 30 30 30 30 30二级ACCESS―模块与VBA 模块与VBA 模块与 二级如果I=11怎么办? 怎么办? 如果 怎么办 10.5 数组二维数组(表的形式) 二维数组(表的形式)和多维数组? ??Dim 数组名([下界 To [上界 ,[下界 To[ 上界 数组名( 下界 下界] 上界], 下界 下界] 上界],…) [As 数据类型 数据类型] 上界 ) dim Aa(19,19) As Integer 等价于 dim Aa(1 To 20,1 To 20) As Integer下面将值30赋给数组: 下面将值30赋给数组: 30赋给数组Dim I As Integer,J As Integer Dim Aa(9,9) As Integer For I=0 To 9 30 30 30 For J=0 To 9 Aa(I,J)=30 30 30 30 Next J 30 30 30 Next I行30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30列 … … … … … … … … … …二级ACCESS―模块与 模块与VBA 二级 30 30 30 30 30 30 30 30 模块与VBA 30 30 10.5 数 动态数组组如果在程序运行之前不能肯定数组的大小 如果在程序运行之前不能肯定数组的大小,可以使 不能肯定数组的大小, 用动态数组。 用动态数组。 ???申明方法:Dim 数组名()As 数据类型 申明方法: 数组名() ()As 申明方法 ???过程中用ReDim语句改变数组的大小 过程中用ReDim 过程中用ReDim语句改变数组的大小ReDim [Preserve] 数组名(下标 ,下标 数组名(下标1[,下标2…]) ) ? ReDim语句是一个可执行语句,只能出现在过程中, ReDim语句是一个可执行语句 只能出现在过程中, 语句是一个可执行语句, 并且可以多次使用,改变数组的维数和大小。 并且可以多次使用,改变数组的维数和大小。 ? 每次使用ReDim语句都会使原来数组中值丢失。 每次使用ReDim语句都会使原来数组中值丢失。 ReDim语句都会使原来数组中值丢失 ? 可以在ReDim后加Preserve 参数来保留数组中的数据。 可以在ReDim后加Preserve 参数来保留数组中的数据。 ReDim后加 只能改变最后一维的大小。 但此时 只能改变最后一维的大小。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.5 数例1:利用Redim改变数据 利用Redim Redim改变数据 维数和大小。 维数和大小。 Sub arraychange() Dim x( ) as interge ReDim x(20) x(20) = 30 debug.Print x(20) ReDim x(20, 5) x(20, 5) = 10 debug.Print x(20, 5) End sub组例2:利用Preserver保留数 利用Preserver Preserver保留数 组中的值。 组中的值。 Sub arraychange() Dim x( ) as interge ReDim x(20) x(20) = 30 debug.Print x(20) ReDim Preserve x(30) debug.Print x(20) End sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.6 运算符1. 算术运算符(均是双目运算,ia=3) 算术运算符(均是双目运算,ia=3)运算符^ * /除 \ 取整 mod + -优先级1 2 3 3 4 5 6 7例ia^2 -ia ia*ia*ia 10/ia 10\ia 10 mod ia 10+ia ia-10结果9 -3 27 3. 1 13 -7例如: 例如:5+10 mod 10 \ 9 / 3 +2 ^2结果是? 结果是?二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.6 运算符2. 字符串运算符???字符串运算符有:&、+(连接两字符串) 字符串运算符有:&、+ 连接两字符串) 字符串运算符有 ???区别 区别 ? +(连接运算):两个操作数均应为字符串类型; 连接运算):两个操作数均应为字符串类型; ):两个操作数均应为字符串类型 ? &(连接运算):两个操作数既可为字符型也可为数 连接运算): ):两个操作数既可为字符型也可为数 值型,当是数值型时, 值型,当是数值型时,系统自动先将其转换为数字字 然后进行连接操作。 符,然后进行连接操作。例:&100& + &123& &Abc& + 123 &100& & 123 100 & 123 &Abc& & 123' 结果为 100123 ' 出错 ' 结果为 100123 ' 结果为 100123 ' 结果为 Abc123二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.6 运算符 3.关系运算符 3.关系运算符运算符 & &= & &= = && Like Is 含义 小于 小于或等于 大于 大于或等于 等于 不等于 字符串匹配 对象比较 所有关系运算 优先级相同。 优先级相同。 低于算术运算 的加“ , 的加“+”,减 运算, “-”运算,高 运算 于逻辑非 运算。 “Not”运算。 运算 优先级 实例 15+10&20 10&=20 10&20 &This&&= &That& &This&= &That& &This&&& &That& &This& Like *is& 结果 False True False True False True True二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.6 运算符 4.逻辑运算符 4.逻辑运算符???非Not、与And 、或Or、异或Xor、逻辑相等(同或)Eqv 、 非Not、 Or、异或Xor 逻辑相等(同或)Eqv Xor、 隐含(逐位比较) 隐含(逐位比较)Imp ???Not逻辑非为单目运算符(要求一个操作数),其它为双 Not逻辑非为单目运算符(要求一个操作数),其它为双 Not逻辑非为单目运算符 ), 目运算符。 目运算符。 A 0 0 1 1 B 0 1 0 1 Not A 1 1 0 0 A and B 0 0 0 1 A or B 0 1 1 1二级ACCESS―模块与VBA 模块与VBA 模块与 二级0:false,1:true 10.6 运算符 5.运算符的执行顺序 5.运算符的执行顺序???表达式中的多种不同类型的运算符的优先级如下: 表达式中的多种不同类型的运算符的优先级如下: 表达式中的多种不同类型的运算符的优先级如下算术运算符&=字符运算符 关系运算符& 算术运算符&=字符运算符&关系运算符&逻辑运算 字符运算符& ???基本说明: 基本说明:? 当一个表达式中出现多种运算符时,首先进行算术运 当一个表达式中出现多种运算符时, 算符,接着处理字符串连接运算符, 算符,接着处理字符串连接运算符,然后处理比较运 算符,最后处理逻辑运算符, 算符,最后处理逻辑运算符,在各类运算中再按照相 应的优先次序进行。 应的优先次序进行。 ? 可以用括号改变优先顺序,强令表达式的某些部分优 可以用括号改变优先顺序, 先运行。括号内的运算总是优先于括号外的运算。 先运行。括号内的运算总是优先于括号外的运算。对 于多重括号,总是由内到外。 于多重括号,总是由内到外。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.7 常用函数VBA中提供了各种函数, VBA中提供了各种函数,利用函数可以完成许多 中提供了各种函数 相关的操作。其使用形式如下: 相关的操作。其使用形式如下: 函数名(参数列表) 函数名(参数列表)要点说明?.1??在三角函数中的自变量是以弧度为单位。 1.在三角函数中的自变量是以弧度为单位。 1.在三角函数中的自变量是以弧度为单位 如:sin300 →sin(3.) ?.2??取整函数int()和fix() 2.取整函数int()和 2.取整函数int() ? Fix(N)为截断取整,即去掉小数后的数:Fix(±9.59)=9 为截断取整,即去掉小数后的数: ± 为截断取整 ? Int(N)不大于N的最大整数:Int(9.59)=9、Int(-9.59)=-10 不大于N的最大整数 不大于 、二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.7 常用函数 要点说明? .3??Rnd函数返回0~1(包括0和不包括1)之间的双精度随 3. Rnd函数返回0 函数返回 包括0和不包括1 机数。 产生1 100的随机整数 的随机整数: 机数。例:产生1-100的随机整数:Int(Rnd *100)+1 怎样产生[N,M]区间的随机数? 怎样产生[N,M]区间的随机数?→int(N+(M-N+1)*Rnd) [N 区间的随机数例 Int(100+201*Rnd) ?.4??类型转换函数 4.类型转换函数 4.? Asc(“Abcd”) 值为65 值为随机数[100,300] 随机数只取首字母的Ascii值 只取首字母的Ascii值 Ascii? Val(&abc123&) 值为 值为0, Val(&1.2sa10&) 值为 值为1.2 注意: Val( )函数只将最前面的数字字符转换为数值。 注意: 函数只将最前面的数字字符转换为数值二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.7 常用函数?.5??日期函数 5.日期函数 5.? Date():返回系统日期,如
Date():返回系统日期, 2008-03? Time():返回系统时间,如 19:30:25 Time():返回系统时间, ? Now():返回系统日期和时间: 19:30:25 Now():返回系统日期和时间:2008-03? Weekday(时间,[w]):返回1~7的整数,表示星期几。 Weekday(时间,[w]):返回1 时间,[w]) 的整数,表示星期几。 其中可选参数w是指定一星期的第一天是星期几的常数。 其中可选参数w是指定一星期的第一天是星期几的常数。 weekday(#2004例:weekday(##)=1 ‘即为星期天 即2004- 29为星期天 weekday(#2004若 weekday(##,3)=6 ‘即让星期二为第一天 即让星期二为第一天 ? DateAdd()、DateDiff()相关参数见书P303 DateAdd()、DateDiff()相关参数见书P303 相关参数见书二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 传统流程图中的基本符号起止框I/O框判断框处理框流程线连接点二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 三种基本结构Y 语句1 语句1 语句2 条件 N 语句2顺序结构选择结构二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 三种基本结构条件 Y 语句组 Y 条件 N a) 当型循环 N 语句组b) 直到循环二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 选择结构1. If…Then语句 单分支结构 语句(单分支结构 语句 单分支结构)If &表达式 Then 表达式& 表达式 语句块 End If 表达式& 语句& 或 If &表达式 Then &语句 表达式 语句例:已知两个数x和y,比较它们的大小,使得x大于y. 大小,使得x大于y. If x&y Then t=x : x=y: y=t End If 或 If x&y Then t=x: x=y: y=txyt二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计2. If…Then…Else语句 双分支结构 语句(双分支结构 语句 双分支结构) If &表达式 Then 表达式& 表达式 &语句块 语句块1& 语句块 Else &语句块 语句块2& 语句块 End If If &表达式 Then &语句 Else &语句 表达式& 语句1& 语句2& 表达式 语句 语句 输出x,y两个中值较大的一个值。 x,y两个中值较大的一个值 例:输出x,y两个中值较大的一个值。IF X&Y Then Print X Else Print Y End If 单行形式: 单行形式:IF X&Y Then Print X Else Print Y 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 10.8 三种基本结构程序设计2. If…Then…Else语句 双分支结构 语句(双分支结构 语句 双分支结构) If &表达式 Then 表达式& 表达式 &语句块 语句块1& 语句块 Else &语句块 语句块2& 语句块 End If If &表达式 Then &语句 Else &语句 表达式& 语句1& 语句2& 表达式 语句 语句 输出x,y两个中值较大的一个值。 x,y两个中值较大的一个值 例:输出x,y两个中值较大的一个值。IF X&Y Then Print X Else Print Y End If 单行形式: 单行形式:IF X&Y Then Print X Else Print Y 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 10.8 三种基本结构程序设计3. If…Then…ElseIf语句(多分支结构) If…Then…ElseIf语句 多分支结构) 语句(形式: 形式 If &表达式 Then 表达式1& 表达式 &语句块 语句块1& 语句块 Else If &表达式 表达式2&Then 表达式 &语句块 语句块2& 语句块 Else If &表达式 表达式3&Then 表达式 &语句块 语句块3& 语句块 … [Else 语句块 n+1 ] End If二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计输入一学生成绩,评定其等级。方法是: 例:输入一学生成绩,评定其等级。方法是:90~100 分为“优秀” 分为“ 分为“ 分为“优秀”,80~89分为“良好”,70~79分为“中等”, 分为 良好” 分为 中等” 60~69分为“及格”,60分以为“不合格” 分为“ 分以为“ 分为 及格” 分以为 不合格” If x&=90 then Print &优秀 优秀& 优秀 ElseIf x&=80 Then Print &良好 良好& 良好 ElseIf x&=70 Then Print &中等 中等& 中等 ElseIf x&=60 Then Print &及格 及格& 及格 Else Print &不及格 不及格& 不及格 End If二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计???Select Case语句(情况语句) 语句( 语句 情况语句)Select Case 变量或表达式 Case 表达式列表 表达式列表1 语句块1 语句块 Case 表达式列表 表达式列表2 语句块2 语句块 … [Case Else 语句块n+1] 语句块 End Select &表达式列表 :与&变量或表达式 同类型的下面四种形式之一: 表达式列表&: 变量或表达式&同类型的下面四种形式之一 表达式列表 变量或表达式 同类型的下面四种形式之一:表达式 一组枚举表达式(用逗号分隔 用逗号分隔) 一组枚举表达式 用逗号分隔 表达式1 表达式2 表达式 To 表达式 Is 关系运算符表达式 A +5 2, 4, 6, 8 60 to 100 Is & 60 数值型或字符串表达式二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计使用select case…..语句来实现成绩等级评选, ..语句来实现成绩等级评选 例:使用select case ..语句来实现成绩等级评选,程序 段如下Select Case x Case 90 to 100 Print &优秀 优秀& 优秀 Case 80 to 89 Print &良好 良好& 良好 Case 70 to 79 Print &中等 中等& 中等 Case 60 to 69 Print &及格“ 及格“ 及格 Case 60 to 65 Print “在60到65之间“ 之间“ 在 到 之间 Case Else Print &不及格 不及格& 不及格 End Select注意: 注意:按照在 Select...Case 结构中出现的顺序, 结构中出现的顺序,将表达式 的值和 Case 语句中的值进行 比较。 比较。 如果发现一个匹配项或一 语句, 条 Case Else 语句,则执行 相应的语句块。 相应的语句块。 在任何情况下, 在任何情况下,随后都会 将控制转移到 End Select 语句后面的语句。 语句后面的语句。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计???选择结构的嵌套 选择结构的嵌套IF语句的Then分支和Else分支中可以完整地嵌套另 在1)IF &条件 Then IF语句的Then分支和Else分支中可以完整地嵌套另 语句的Then分支和Else 条件1& ( ) 条件 条件1& (2)IF &条件 Then ) 条件 IF语句或 ….. 语句或Select Case语句 同样Select Case语句每一 语句, 一IF语句或Select Case语句,同样Select Case语句每一 ….. if &条件 Then 条件2& 条件 Case分支中都可嵌套另一IF语句或另一 Case …Case语句 分支中都可嵌套另一IF语句或另一Select 语句。 Select 个Case分支中都可嵌套另一IF语句或另一Select Case语句。 …… Case …… 下面是两种正确的嵌套形式: 下面是两种正确的嵌套形式: Else….. End If …. Else …. IF &条件 条件3& Then 条件 ….. Else ….. End If ….. End IF IF &条件 条件1& Then 条件 …… Else ….. End If …… Case…. ….. End Select …. End IF二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计VBA的三个选择函数 的三个选择函数? ??IIF函数: IIf(条件式、表达示 ,表达示 函数: 条件式、 函数 条件式 表达示1,表达示2)? 条件为真,返回表达式1的值;为假,返回表达示2的值 条件为真,返回表达式1的值;为假,返回表达示2 ? 如:IIf(a&b,a,b) 返回a,b中较大的值 返回a,b a,b中较大的值? ??Switch函数 函数 switch(条件式 ,表达式 条件式 ,表达式 条件式1,表达式1[条件式 表达式2…]) 条件式2, 条件式? 条件式与表达式成对出现,如条件式为真,则返回对应表达式的值 条件式与表达式成对出现,如条件式为真, ? y=switch(x&0,1,x=0,0,x&0,1) 根据 的值来为 赋值。 根据x的值来为 赋值。 的值来为y赋值? ??Choose函数 函数 Choose(索引式,选项 选项 索引式, 选项2…[,选项 选项n]]) 索引式 选项1[,选项 选项? 根据索引式的值返回选项列表中的某个值 ? y=choose(x,1,m,7,n) 根据 的值来为 赋值。 根据x的值来为 赋值。 的值来为y赋值二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 循环结构? ⑴??Do…Loop:通过Do来执行循环,有四种形式。其中 ⑴ Do来执行循环 :通过Do来执行循环,有四种形式。While是条件为真时循环,Until是条件为假时循环。 While是条件为真时循环,Until是条件为假时循环。 是条件为真时循环 是条件为假时循环形式1、2(当型循环) : 当型循环) 形式1Do { While|Until }&条件 条件& 条件 语句块 [Exit Do] 语句块 Loop条件F T语句块E x it D o 语句块二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 当型循环举例Sub Command1.Click() Dim I As Intger I=1 Do While I&=20 Print I I=I+1 Loop End Sub Sub Command1.Click() Dim I As Intger I=1 Do Until I&=20 Print I I=I+1 Loop End Sub结果I= 结果 =21结果I=1 结果二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 循环结构形式3、 : 直到循环 直到循环) 形式 、4:(直到循环)Do 语句块 [Exit Do] 语句块 Loop { While|Until} &条件 条件& 条件E xit D o 语句块 语句块T条件F二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 直到循环举例Sub Command1.Click() Dim I As Intger I=1 Do Print I I=I+1 Loop While I&=20 End Sub Sub Command1.Click() Dim I As Intger I=1 Do Print I I=I+1 Loop Until I&=20 End Sub结果I=21 结果结果I=2 结果二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 While…Wend语句循环结构 While…Wend语句循环结构&条件 While &条件 & 循环块& &循环块& Wend 说明:该语句的功能与Do 说明:该语句的功能与Do &条件 条件& .Loop .Loop实现 While &条件&….Loop实现 的循环完全相同。 的循环完全相同。Sub Command1.Click() Dim I As Intger I=1 While I&=20 Print I I=I+1 Wend End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 For循环语句 (一般用于循环次数已知) For循环语句 一般用于循环次数已知)For 循环变量=初值 to 终值 [Step 步长 循环变量= 步长] 语句块 [Exit For] 循环体 语句块 Next 循环变量 循环执行的条件&0 初值 终值 =1 时,可省略 初值&终值 可省略循环变量得初 值循 环 变 量 在 终值 内F T语句块Exit For语句块步长 &0 初值 终值 初值&终值=0 初值=终值 初值=循环变量加步长二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.8 三种基本结构程序设计 For循环语句 一般用于循环次数已知) For循环语句 (一般用于循环次数已知)循环次数= Int ( 终值 ?初值 + 1) 步长例: For I=2 To 13 Step 3 Print I , Next I 循环次数?输出结果? Print “I=“, I 循环次数?输出结果? 循环执行次数 2 5? = Int ( 133 2 + 1) = 4输出I的值分别为 输出 的值分别为: 的值分别为 8 11二级ACCESS―模块与VBA 模块与VBA 模块与 二级出了循环输出为: 出了循环输出为 I=14 10.8 三种基本结构程序设计 循环的嵌套――多重循环结构 多重循环结构 循环的嵌套如果在一个循环内完整地包含另一个循环结构, 如果在一个循环内完整地包含另一个循环结构,则称为 一个循环内完整地包含另一个循环结构 多重循环,或循环嵌套,嵌套的层数可以根据需要而定。 多重循环,或循环嵌套,嵌套的层数可以根据需要而定。以 下是各种嵌套循环的示例: 下是各种嵌套循环的示例:(1)For I=…. ) ….. For J=…. …. Next J ….. Next I(3)Do While…. ) ….. For J=…. …. Next J ….. (2)For I=…. ) ….. Do While/Until …. …. Loop ….. (4)Next I )Do While/Until…. ….. Do While/Until …. …. 二级ACCESS―模块与VBA 模块与VBA 模块与 Loop 二级 ….. 10.8 三种基本结构程序设计对于循环的嵌套,要注意以下事项: 对于循环的嵌套,要注意以下事项:内循环变量与外循环变量不能同名; (1) 内循环变量与外循环变量不能同名; 外循环必须完全包含内循环,不能交叉; (2) 外循环必须完全包含内循环,不能交叉; 不能从循环体外转向循环体内,也不能从外循环转向内循环. (3) 不能从循环体外转向循环体内,也不能从外循环转向内循环.正 确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错误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二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.9 其它语句 1.Goto 语句形式: 形式 GoTo {标号 行号 标号|行号 标号 行号}作用是无条件地转移到标号或行号指定的那行语句. 作用是无条件地转移到标号或行号指定的那行语句. 由于goto语句破坏了程序的逻辑顺序, goto语句破坏了程序的逻辑顺序 由于goto语句破坏了程序的逻辑顺序,一般不赞成使用 If Number = 1 Then GoTo Line1 Else GoTo Line2 Line1:标号 标号1 标号 MyString = &Number equals 1“ Line2:标号 标号2 标号 MyString = &Number equals 2&二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.9 其它语句2.Exit 语句Exit 语句用于退出 Do...Loop、For...Next、Function或 、 、 或 Sub代码块。 对应的使用格式为:Exit Do、Exit For、Exit 代码块。 代码块 对应的使用格式为: 、 、 。分别表示退出 循环、 循环、 Function、Exit Sub。分别表示退出DO循环、For循环、函数 、 循环 循环 过程、子过程。语法: 过程、子过程。语法: Exit { Do | For | Function | Select | Sub | While } 例如: 例如: 循环、 下面的例子是使用 Exit 语句退出 For...Next 循环、 循环及子过程。 Do...Loop 循环及子过程。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.9 其它语句Private Sub Form_Click() Dim I%, Num% Do ' 建立无穷循环。 建立无穷循环。 For I = 1 To 100 ' 循环 100 次。 Num = Int(Rnd * 100) ' 生成一个 生成一个0~99的随机数。 的随机数。 的随机数 Select Case Num Case 10: Exit For '退出 For...Next 循环。 循环。 退出 Case 50: Exit Do '退出 Do...Loop 循环。 退出 循环。 Case 64: Exit Sub ' 退出子过程。 退出子过程。 End Select Next I Loop End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.9 其它语句3.Continue 语句将控制立即传递给下一轮循环。 将控制立即传递给下一轮循环。语法: Continue { Do | For | While }Private Sub Form_Click() Dim I%, Num% For I = 1 To 100 ‘ 循环 100 次 if ((I mod 2)=0 ) then Num = Num+I else continue for end if Next I二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.9 其它语句 4.With...EndWith 对象名 语句块 End With 说明:With 语句可以对某个对象执行一系列的语句, 语句可以对某个对象执行一系列的语句, 某个对象执行一系列的语句 说明: 而不用重复指出对象的名称。 而不用重复指出对象的名称。 例如,要改变一个对象的多个属性, 例如,要改变一个对象的多个属性,可以在 With 控制 结构中加上属性的赋值语句, 结构中加上属性的赋值语句,这时候只是引用对象一次而不 是在每个属性赋值时都要引用它。 是在每个属性赋值时都要引用它。下面的例子显示了如何使 语句来给同一个对象的几个属性赋值。 用 With 语句来给同一个对象的几个属性赋值。二级ACCESS―模块与VBA 模块与VBA 模块与 二级With 语句 10.9 其它语句需要对同一对象设置几个属性。途径之一是使用多条语句。 需要对同一对象设置几个属性。途径之一是使用多条语句。Private Sub Form_Load() Command1.Caption = &退出 退出(E&xit)& 退出 Command1.Top = 500 Command1.Left = 4500 Command1.Enabled = True End Sub 使用With...End With 语句,上面程序的代码如下。 语句,上面程序的代码如下。 使用 Private Sub Form_Load() With Command1 .Caption = &OK& .Top = 500 .Left = 4500 .Enabled = True End With End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作1.消息窗MsgBox 1.消息窗MsgBox 消息窗消息窗用于显示消息,等待用户单击按钮,并返回一个 消息窗用于显示消息,等待用户单击按钮, 整型值。基本格式: 整型值。基本格式: MsgBox (提示 按钮风格 ,[标题 帮助 上下文 提示,[按钮风格 标题],[帮助 上下文]) 提示 按钮风格] 标题 帮助],[上下文提示信息 标题 命令按钮 图标二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作1.消息窗MsgBox 1.消息窗MsgBox 消息窗MsgBox (提示 按钮风格 ,[标题 帮助 上下文 提示,[按钮风格 标题],[帮助 上下文]) 提示 按钮风格] 标题 帮助],[上下文说明: 说明:1、除“提示”外,省略任何位置参数,则必须保留相应的逗号分隔 提示” 省略任何位置参数,符。 提示文本如需换行, 将各行分开。 2、提示文本如需换行,则用 Chr(13) + Chr(10) 将各行分开。MsgBox(&Hello&, vbOKOnly, &my title&)MsgBox(&Hello Chr(13)+Chr(10) World&, , &my title&)二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作根据用户所选按 函数返回1 钮,函数返回1到7的 整数值, 整数值,其含义如下二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作 2.输入框InputBox 2.输入框InputBox 输入框提示并获取用户输入的值。基本格式: 提示并获取用户输入的值。基本格式:变量名=InputBox[$](&提示信息 ,&标题 ,&缺省 ,&x坐标 ,&y坐标 ) 提示信息&[, 标题 标题&][, 缺省 缺省&][, 坐标 坐标&][, 坐标 坐标&] 变量名 提示信息标题题 提示缺省值注意:输入区缺省值有$返回字符类型 否则为数值类型 字符类型, 数值类型. 注意:输入区缺省值有$返回字符类型,否则为数值类型.提示文本如需换行, 将各行分开。 提示文本如需换行,则用 Chr(13) + Chr(10) 将各行分开。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作返回字符类型举例:有下列语句如下 返回字符类型举例:有下列语句如下:Dim strName As String( 40), strS1 As String(40) , strS1 = “请输入你的姓名” + Chr(13) + Chr(10) + “然后单击确定” 请输入你的姓名” 然后单击确定” 请输入你的姓名 然后单击确定 strName= InputBox$(strS1, “输入框”, , 100,100) , 输入框” ,当键盘输入“王晓明” 后,变量 变量strName获得键盘输入的值 获得键盘输入的值. 当键盘输入“王晓明” 变量 获得键盘输入的值标题题 提示缺省值二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作 1. DoCmd对象 对象VBA中可以通过调用DoCmd对象的方法来实现对 VBA中可以通过调用DoCmd对象的方法来实现对 中可以通过调用DoCmd对象的方法来 Access的各种操作 的各种操作。 Access的各种操作。方法OpenForm OpenQuery OpenReport OpenView OpenModule语法说明打开一个窗体 运行一个查询 打开报表 打开视图 运行模块打开数据访问页DoCmd.openform “窗体名” 窗体名” 窗体名 DoCmd.openQuery “查询名” “查询名 查询名” DoCmd.openReport “报表名” 报表名” 报表名 DoCmd.openView “视图名” 视图名” 视图名 DoCmd.openModule “模块名” 模块名” 模块名 OpenDataAccessPage DoCmd.open… “访问页名” 访问页名” 访问页名 OpenTable DoCmd.openTable “表名” 表名” 表名 Close 见后续 RunMacro DoCmd.RunMacro “宏名” 宏名” 宏名 RunSQL DoCmd.RunSQL “操作查询” 操作查询” 操作查询二级ACCESS―模块与VBA 模块与VBA 模块与 二级打开表 关闭对象 运行宏 运行操作查询 10.10 VBA中的常用操作 VBA中的常用操作打开各种ACCESS对象示例 打开各种ACCESS对象示例 ACCESS二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作???关闭 关闭ACCESS中的对象 关闭 中的对象 DoCmd.Close [objecttype, objectname], [save] 下列固有常量之一: objecttype 下列固有常量之一: acDefault(默认值) acDefault(默认值) acDiagram 图 acForm 窗体 acMacro 宏 acDataAccessPage 数据访问页 acModule 模块 acQuery 查询 acReport 报表 表 acTable二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作关闭各种ACCESS对象示例 对象示例 关闭各种二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作 2. 计时事件 计时事件TimerVBA可通过设置窗体的“计时器间隔(TimerInterval)”属性 VBA可通过设置窗体的“计时器间隔(TimerInterval) 属性 可通过设置窗体的 (TimerInterval) 与添加“计时器触发器(Timer)”事件来完成“定时”功能。 与添加“计时器触发器(Timer) 事件来完成“定时”功能。 基本处理过程:Timer事件每隔TimerInterval时间间隔被 事件每隔TimerInterval 基本处理过程:Timer事件每隔TimerInterval时间间隔被 激发一次,然后运行Timer事件过程来响应。 Timer事件过程来响应 激发一次,然后运行Timer事件过程来响应。Private Sub Form_Timer() Labeltime.Caption = CStr(Now()) End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.10 VBA中的常用操作 VBA中的常用操作 3. 运行错误处理程序中一定要合理的设置错误处理,以便处理程序在不可 程序中一定要合理的设置错误处理, 预知的情况下发生错误。如果仅由操作系统来处理这些错误, 预知的情况下发生错误。如果仅由操作系统来处理这些错误, 不仅会让用户不知所措,还会造成灾难性的后果。VBA中提供 不仅会让用户不知所措,还会造成灾难性的后果。VBA中提供 了以下语句来处理程序运行时的错误: 了以下语句来处理程序运行时的错误: ???On Error GoTo 标号:发生错误时转移到标号处进行处理 标号: ???On Error Resume Next:忽略的发生错误,执行下面语句 :忽略的发生错误, ???On Error GoTo 0:关闭出错处理 :二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递 Sub子过程 子过程VBA中 Sub子过程分为 子过程分为: 在VBA中,的Sub子过程分为:事件过程和通用过程 ?.1??事件过程 1.事件过程 1.(1)窗体事件的语法 ) Private Sub Form_事件名 参数列表 事件名(参数列表 事件名 参数列表) 语句组> <语句组> End Sub (2)控件事件的语法 ) Private Sub 控件名 事件名 参数列表 控件名_事件名 参数列表) 事件名(参数列表 语句组> <语句组> End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递?.2??通用过程 2.通用过程 2.子过程的定义形式如下: 子过程的定义形式如下: [Public|Private][Static] Sub 子过程名 形参表 子过程名([形参表 形参表]) &局部变量或常数定义 局部变量或常数定义& 局部变量或常数定义 语句组> <语句组> [Exit Sub] 语句组> <语句组> End Sub说明: 说明:子过程名:命名规则与变量名规则相同。 (1)子过程名:命名规则与变量名规则相同。子过程名不返 回值,而是通过形参与实参的传递得到结果, 回值 , 而是通过形参与实参的传递得到结果 , 调用时可返回 多个值。 多个值。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递形式参数列表:形式参数通常简称“形参” (2)形式参数列表:形式参数通常简称“形参”,仅表示形 参的类型、个数、位置,定义时是无值的, 参的类型 、 个数 、 位置 , 定义时是无值的 , 只有在过程被调 用时,虚实参结合后才获得相应的值。 用时,虚实参结合后才获得相应的值。 (3)过程可以无形式参数,但括号不能省。 过程可以无形式参数,但括号不能省。 (4)参数的定义形式: 参数的定义形式: [ByVal|ByRef]变量名 变量名[( )][As 类型 类型][,…], | 变量名 , ByVal表示当该过程被调用时 参数是按值传递的; 表示当该过程被调用时, ByVal表示当该过程被调用时,参数是按值传递的; ByRef(缺省 表示当该过程被调用时,参数是按地址传递的。 缺省) ByRef(缺省)表示当该过程被调用时,参数是按地址传递的。 一个交换两个整型变量值的子过程。 例. 一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 10.11 过程调用与参数传递 Function过程 过程[Public|Private][Static]Function 函 数 名 ([& 参 数 列 表 &])[As&类型 类型&] &])[As&类型&] 局部变量或常数定义& &局部变量或常数定义& 语句块& &语句块& 函数体[函数名=返回值] 函数体[函数名=返回值] [Exit Function] 语句块& &语句块& 函数名=返回值] [函数名=返回值] End Function注意:在函数体内,函数名可以当变量使用, 注意:在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的, 是通过对函数名的赋值语句来实现的,在函数过程中至少要对函 数名赋值一次。 数名赋值一次。 二级ACCESS―模块与VBA 模块与VBA 二级 模块与 10.11 过程调用与参数传递 过程的调用1 子过程的调用 参数列表] 子过程名 [参数列表 参数列表 子过程名(参数列表 参数列表) 或 Call 子过程名 参数列表 2 函数过程的调用 函数过程名([参数列表 参数列表]) 变量名 = 函数过程名 参数列表说明: 说明:(1)参数列表称为实参或实元, (1)参数列表称为实参或实元,它必须与形参保持个数相 参数列表称为实参 位置与类型一一对应。 同,位置与类型一一对应。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递(2)调用时把实参值传递给对应的形参。 (2)调用时把实参值传递给对应的形参。其中值传递时实 调用时把实参值传递给对应的形参 参的值不随形参的值变化而改变。 参的值不随形参的值变化而改变。而地址传递时实参的值 随形参值的改变而改变。 随形参值的改变而改变。 (3)当参数是数组时,形参与实参在参数声明时应省略其 (3)当参数是数组时,形参与实参在参数声明时应省略其 当参数是数组时 维数,但括号不能省。 维数,但括号不能省。 (4)调用子过程的形式有两种,用Call关键字时,实参 (4)调用子过程的形式有两种, Call关键字时, 调用子过程的形式有两种 关键字时 必须加圆括号括起,反之则实参之间用“,”分隔。 必须加圆括号括起,反之则实参之间用“ 分隔。 例:调用上面定义的Sawp子过程的形式: 调用上面定义的Sawp子过程的形式: Sawp子过程的形式 Swap a,b Call Swap(a,b)二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递过程调用的执行过程: 过程调用的执行过程:Private Sub CmdOK() …… Call Swap(a,b) …… Swap a,b End SubPrivate Sub Swap(x%,y%) Dim temp% Temp=X X=Y Y=Temp End Sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递 过程之间参数的传递1、形式参数 是指在定义通用过程时,出现在Sub或Function语句中的变 是指在定义通用过程时,出现在Sub或Function语句中的变 定义通用过程时 Sub 量名后面园括号内的数,是用来接收传送给子过程的数据, 量名后面园括号内的数,是用来接收传送给子过程的数据,形 参表中的各个变量之间用逗号分隔。 参表中的各个变量之间用逗号分隔。 2、实际参数 实际参数是指在调用Sub Function过程时 Sub或 过程时, 实际参数是指在调用 Sub 或 Function 过程时 , 写入子过程 名或函数名后括号内的参数,其作用是将它们的数据( 名或函数名后括号内的参数,其作用是将它们的数据(数值或 地址)传送给Sub Function过程与其对应的形参变量 Sub或 过程与其对应的形参变量。 地址)传送给Sub或Function过程与其对应的形参变量。 实参可由常量、表达式、有效的变量名、数组名(后加左、 实参可由常量、表达式、有效的变量名、数组名(后加左、 可由常量 右括号, A())组成,实参表中各参数用逗号分隔。 右括号,如A())组成,实参表中各参数用逗号分隔。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递3、参数传递(虚实结合) 参数传递(虚实结合) 参数传递指主调过程的实参( 参数传递指主调过程的实参(调用时已有确定值和内存 地址的参数)传递给被调过程的形参, 地址的参数)传递给被调过程的形参,参数的传递有两种方 按值传递、按地址传递。形参前加“ByVal”关键字的是 式:按值传递、按地址传递。形参前加“ByVal 关键字的是 按值传递,缺省或加“ByRef”关键字的为按地址传递 关键字的为按地址传递。 按值传递,缺省或加“ByRef 关键字的为按地址传递。传址与传值传址:形参得到的是实参的地址, 传址:形参得到的是实参的地址,当形参值的改变同时 也改变实参的值。 也改变实参的值。 传值:形参得到的是实参的值, 传值:形参得到的是实参的值,形参值的改变不会影响 实参的值。 实参的值。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递例6.4Sub Swap1(ByVal x%, ByVal y%) Dim Temp% Temp = x: x = y: y = Temp End Sub Sub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End SubPrivate Sub CmdOK_Click() a% = 10: b% = 20: Swap1 a, b Print &A1=“& a &&B1=“&b a = 10: b = 20: Swap2 a, b Print &A2=“& a& &B2=“& b End Sub‘传 值 传 '传地址 传地址二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.11 过程调用与参数传递值传递的执行过程如下图: 值传递的执行过程如下图: 的执行过程如下图地址传递数据的执行过程 地址传递数据的执行过程二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.12 VBA数据库编程 VBA数据库编程VBA通过数据库引擎(Microsof jet)工具完成对数 VBA通过数据库引擎(Microsof jet)工具完成对数 通过数据库引擎 据库的访问, 据库的访问,所谓数据库引擎其实是一组动态连接库 (DLL),程序运行时被连接到VBA程序程序而实现对数据 程序运行时被连接到VBA (DLL),程序运行时被连接到VBA程序程序而实现对数据 中提供了3 库的访问功能。VBA中提供了 种数据库访问接口。 库的访问功能。VBA中提供了3种数据库访问接口。API:开放数据库互连应用编程接口。 ODBC API:开放数据库互连应用编程接口。 DAO:数据访问对象。 DAO:数据访问对象。 ADO:Active数据对象 ADO:Active数据对象VBA访问的三种数据库类型: VBA访问的三种数据库类型: 访问的三种数据库类型本地数据库: 本地数据库:ACCESS 外部数据库 ODBC数据库 数据库: Oracle、SyBase、 Server等 ODBC数据库:如Oracle、SyBase、SQL Server等二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.12 VBA数据库编程 VBA数据库编程DAO数据对象模型模型 DAO数据对象模型模型 DBEngine Workspace(s) Database(s) RecordSet(s) Field(s) QueryDef(s) DBEngine数据库引擎为 DBEngine数据库引擎为 DAO模型最上层对象 模型最上层对象, DAO模型最上层对象, 包含并管理其它对象。 包含并管理其它对象。二级ACCESS―模块与VBA 模块与VBA 模块与 二级Error(s) 10.12 VBA数据库编程 VBA数据库编程ADO数据对象模型模型(与语言无关) ADO数据对象模型模型(与语言无关) 数据对象模型模型 Error(s) Connection Command RecordSet Field(s)指定数据连接提供者, 指定数据连接提供者,建 立到数据源的连接。 立到数据源的连接。可执行一个命令,如可执行 可执行一个命令,如可执行SQL 查询。一般用于表结构的修改。 查询。一般用于表结构的修改。 可执行SQL查询返回一个记录集, 查询返回一个记录集, 可执行 查询返回一个记录集 并可对记录集进行修改、插入、 并可对记录集进行修改、插入、 删除操作。 删除操作。是ADO中最灵活的对 中最灵活的对 象。二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.12 VBA数据库编程 VBA数据库编程分别用DAO ADO来完成对 教学管理.mdb DAO和 来完成对“ .mdb”文件 例:分别用DAO和ADO来完成对“教学管理.mdb 文件 学生表”的学生年龄都加1的操作。( 。(假设文件 中“学生表”的学生年龄都加1的操作。(假设文件 存放在E 考试中心”文件夹中) 存放在E盘“考试中心”文件夹中) 使用DAO技术: 使用DAO技术: DAO技术Sub SetAgePlus1() dim we as DAO.Workspace dim db as DAO.Database dim rs as DAO.Recordset dim fd as DAO.Field set ws=DBEngine.Workspace(0) set db=ws.OpenDatabase(“e:\考试中心教程 教学管理 考试中心教程\教学管理 考试中心教程 教学管理.mdb”) ’打开数据库 set rs=db.OpenRecordSet(“学生表”) 学生表” 学生表 set fd=rs.Fields(“年龄”) 年龄” 年龄 ‘返回“学生表”记录集 返回“学生表” 返回 ’设置“年龄”字段 设置“年龄” 设置二级ACCESS―模块与VBA 模块与VBA 模块与 二级‘工作区对象 工作区对象 ’数据库对象 数据库对象 ’记录集对象 记录集对象 ‘字段对象 字段对象 10.12 VBA数据库编程 VBA数据库编程‘对记录集用循环结构进行遍历 对记录集用循环结构进行遍历 Do while not rs.eof rs.edit fd=fd+1 rs.update rs.movenext Loop ‘关闭并回收对象变量 关闭并回收对象变量 rs.close db.close set rs=Nothing set db=Nothing End sub二级ACCESS―模块与VBA 模块与VBA 模块与 二级’设置为“编辑”状态 设置为“编辑” 设置为 ‘“年龄”加1 年龄” 年龄 ’更新记录,保存年龄值 更新记录, 更新记录 ‘记录指针移动至下一条 ‘记录指针移动至下一条 10.12 VBA数据库编程 VBA数据库编程使用ADO技术: 使用ADO技术: ADO技术Sub SetAgePlus1() dim cn as New ADODB.Connection dim rs as New ADODB.RecordSet dim fs as ADODB.Field dim strConnect as String dim strSQL as String cn.Provider=“Microsoft.jet.oledb.4.0” cn.open strconnect strSQL=“select 年龄 from 学生表” 学生表” set fd=rs.Fields(“年龄”) 年龄” 年龄二级ACCESS―模块与VBA 模块与VBA 模块与 二级‘连接对象 连接对象 ’记录集对象 记录集对象 ’字段对象 字段对象 ‘连接字符串 连接字符串 ’查询字符串 查询字符串 ‘设置数据提供者 设置数据提供者 ’打开与数据源的连接 打开与数据源的连接 ‘设置查询语句strconnect=“e:\考试中心教程 教学管理 考试中心教程\教学管理 考试中心教程 教学管理.mdb”) ’设置连接数据库 设置连接数据库rs.open strSQL,cn,adOpenDynamic,adLockOptimistic,adCmdText 10.12 VBA数据库编程 VBA数据库编程‘对记录集用循环结构进行遍历 对记录集用循环结构进行遍历 Do while not rs.eof fd=fd+1 rs.update rs.movenext Loop ‘关闭并回收对象变量 关闭并回收对象变量 rs.close db.close set rs=Nothing set db=Nothing End sub ‘“年龄”加1 年龄” 年龄 ’更新记录,保存年龄值 更新记录, 更新记录 ‘记录指针移动至下一条 记录指针移动至下一条二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.12 VBA数据库编程 VBA数据库编程 ADO数据对象模型的相关要点 ADO数据对象模型的相关要点记录集的打开方式 打开的对象rs.open strSQL,cn,adOpenDynamic,adLockOptimistic,adCmdText数据集 声明的Connection对象 对象 声明的???Recordset对象的LocyType属性决定数据的锁定方式 Recordset对象的LocyType属性决定数据的锁定方式 Recordset对象的LocyType? adLockReadOnly:数据处于只读状态。 :数据处于只读状态。 ? adLockPessimistic(保守式锁定):编辑数据时即锁定数据源记录,直 (保守式锁定) 编辑数据时即锁定数据源记录, 到数据编辑完成才释放。 到数据编辑完成才释放。 ? adLockOptimistic(开放式锁定):编辑数据时不锁定,用Update方法 (开放式锁定) 编辑数据时不锁定, Update方法 提交数据时才锁定数据源记录。 提交数据时才锁定数据源记录。 ? adLockBatchOptimistic(开放式更新):应用于批更新模式 (开放式更新)二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.12 VBA数据库编程 VBA数据库编程???Recordset记录集对象记录指针的移动方法 Recordset记录集对象记录指针的移动方法 Recordset? MoveFirst 记录指针移到第一条记录 ? MoveNext 记录指针移到当前记录的下一条记录 ? MovePrevious 记录指针移到当前记录的上一条记录 ? MoveLast 记录指针移到最后一条记录???Recordset记录集的BOF和EOF属性用于判断记录指针 Recordset记录集的BOF和EOF属性用于判断记录指针 Recordset记录集的BOF 是否处于有记录的正常位置? 记录指针将指向最后一条记录之后,EOF属性为True 记录指针将指向最后一条记录之后,EOF属性为 属性为True ? 记录指针将指向第一条记录之前,BOF属性为True 记录指针将指向第一条记录之前,BOF属性为 属性为True ? BOF和EOF属性的值均为True,表示记录集为空 BOF和EOF属性的值均为True, 属性的值均为True二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.12 VBA数据库编程 VBA数据库编程 数据库访问的几个重要函数???Nz函数:将Null值转换为0,空字符串,及指定值 Nz函数: Null值转换为 值转换为0 空字符串, Nz函数 语法:Nz(表达式或字段属性值[,指定值 表达式或字段属性值[,指定值]) 语法:Nz(表达式或字段属性值[,指定值])? 指定值省略时,将数值型字段中的NULL转换为0,将字符 指定值省略时,将数值型字段中的NULL转换为0 NULL转换为 型字段的NULL转换为空字符串”” NULL转换为空字符串””。 型字段的NULL转换为空字符串””。 ? 指定值给定,则将NULL转换为指定值 指定值给定,则将NULL NULL转换为指定值???DLookup函数:从指定记录集中搜索特定字段的值。 DLookup函数:从指定记录集中搜索特定字段的值。 DLookup函数 语法:DLookUp(表达式 记录集[,条件式]) 表达式, [,条件式 语法:DLookUp(表达式,记录集[,条件式])? 表达式用户返回检索字段。 表达式用户返回检索字段。 ? 如果条件返回多个记录,则返回第一个记录相应字段的值 如果条件返回多个记录, ? DLookUp( 学生姓名”,“学生表”,”学生姓名=’张三’”) DLookUp(“学生姓名 学生姓名” 学生表 学生表” 学生姓名 张三 学生姓名= 张三’二级ACCESS―模块与VBA 模块与VBA 模块与 二级 10.12 VBA数据库编程 VBA数据库编程数据库访问的几个重要函数???DCount(表达式,记录集[,条件式]):统计记录个数 (表达式,记录集[,条件式]): [,条件式]) ???DAvg(表达式,记录集[,条件式]):统计某字段的平均值 (表达式,记录集[,条件式]): [,条件式]) ???DSum(表达式,记录集[,条件式]):对某字段求和 (表达式,记录集[,条件式]): [,条件式])? 表达式―字段 表达式 字段 ? 记录集 表名、查询或SQL 记录集―表名、查询或SQL 表名 ? 条件式 条件表达式 条件式―条件表达式例:DCount(“编号”,“教师表”,”性别 男’” 编号” 教师表 教师表” 性别 性别=‘男’”) 编号 DAvg(“成绩”,“选课成绩”) 成绩” 选课成绩 选课成绩” 成绩 DSum(“订单数”,“订单表”) 订单数” 订单表 订单表” 订单数二级ACCESS―模块与VBA 模块与VBA 模块与 二级
第9章 模块与VBA程序设计_习题 - 第 9 章 模块与 VBA 程序设计_习题 一、选择题 1.模块是存储代码的容器,其中窗体就是一种( )。A A.类模块 B.标准模块...Excel VBA编程 典型实例--设计对账模块_计算机软件及应用_IT/计算机_专业资料。Excel VBA 编程 典型实例--设计对账模块 在大型超市和商场中,都以实现电子货币的...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

 

随机推荐