《Access_2002数据库应用实训教程》第10章:Access_VBA程序设计_第1页
《Access_2002数据库应用实训教程》第10章:Access_VBA程序设计_第2页
《Access_2002数据库应用实训教程》第10章:Access_VBA程序设计_第3页
《Access_2002数据库应用实训教程》第10章:Access_VBA程序设计_第4页
《Access_2002数据库应用实训教程》第10章:Access_VBA程序设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、上一页上一页下一页下一页返回首页返回首页返回本章返回本章第10章 Access VBA程序设计10.1 模块的创建10.2 VBA编程上一页上一页下一页下一页返回首页返回首页返回本章返回本章10.1 模块的创建 模块是将VBA(Visual Basic for Applications)声明和过程作为一个单元进行保存的集合。模块基本上是由声明、语句和过程组成的,它们作为一个已命名的单元存储在一起,对VBA代码进行组织,并完成特定的任务。 Access有两种类型的模块:标准模块和对象类模块。不论哪种模块中的每一个过程都可以是一个Function过程或一个Sub过程,如下图10.1所示。两个列表中

2、,是“对象对象”框,是 “过程过程”框(即“事件”框),当选择了任一个对象后,右边的“事件”也会随之切换,因为不同类 型的对象,也有不同的事件,选择任一事件后,即可显示该事件 程序的内容,且光标会停留在程序的第一行,可以立即 开始编写程序。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.1代码编辑窗口 “对象对象”框“过程过程”框声明过程 “过程视图过程视图”按钮“完整的模块视图完整的模块视图”按钮 注意:在“事件”中,凡显示为粗体的,即表示该事件已 内含程序。上一页上一页下一页下一页返回首页返回首页返回本章返回本章 模块和程序不同:模块只有两个任务,一个是保存程序,另一个是

3、声明可以在多个程序中使用的变量或常量,模块本身不可以被运行。而程序也称为“运行程序”,一个模块中含有若干个程序,所以程序是最基本的运行单位。 创建模块,要在VBA编程环境VBE(Visual Basic Editor)中进行。当我们选中一个需要编写代码的控件,并准备为其对应的某一事件的响应方法编写VBA代码时,就应该启动VBE,在此编辑环境中进行VBA代码编辑操作。如图10.2所示为VBE窗口:创建模块的方法有几种,如下:1.在“数据库”窗口的对象栏中单击“模块”,然后单击工具栏上的 “新建”按钮打开VBE编辑器,为数据库创建新的模块对象。上一页上一页下一页下一页返回首页返回首页返回本章返回本

4、章2.在Access菜单中单击“插入”“模块”来创建标准模块。3.如果在已打开的VBE编辑器中,则可以在工具栏中单击“插入模块”按钮“”,或者单击VBE菜单中“插入”“模块”来创建新的标准模块。读者可以任选一种适合自己的方法来创建模块。 除了自己新建模块外,还可以将宏转换为模块,在数据库窗口中选择需要转换的宏,选择“工具”菜单中“宏”子菜单中的“将宏转换为Visual Basic代码”命令,系统会弹出“转换宏”对话框,如图10.3所示,转换后的宏被保存为标准模块。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.2 VBE编辑窗口上一页上一页下一页下一页返回首页返回首页返回本章

5、返回本章图10.3 转换宏对话框 上一页上一页下一页下一页返回首页返回首页返回本章返回本章10.1.1 创建窗体和报表类模块窗体和报表模块都是对象类模块,而且它们都依附于某一窗体或报表而存在。窗体和报表中含有事件过程,通过事件过程来控制窗体或报表的行为,以及它们对用户操作的响应。操作一 窗体类模块创建的操作步骤如下:1.在数据库窗口“对象”列表中的“窗体”对象有中选择要操作的窗体名,此例选择“系统控制窗体”,如图10.4所示;2.然后从“视图”菜单中选择“代码”命令或单击视图中工具栏上的(代码)图标,进入VBE编辑窗口,如图10.5所示; 3.从模块代码窗口中的“对象”列表框中选择要操作的对象

6、名称,为 “进货录入”控件的名称“command3”; 4.选择对象后,从模块代码窗口中的“过程事件”列表框 中选择相关联的过程名,此处选择“Click” 事件,如图10.6所示; 上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.4 选择“系统控制窗体”上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.5 VBE编辑窗口“空白代码窗口”上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.6 选择“对象”和“事件”代码窗口上一页上一页下一页下一页返回首页返回首页返回本章返回本章5.在代码窗口中出现的标准过程格式中添加要实现的代码。代码如下:Private

7、 Sub Command3_Click()On Error GoTo Err_Command3_ClickDim stDocName As StringDim stLinkCriteria As StringstDocNamestDocName = = 商品进货数据录入商品进货数据录入 DoCmd.OpenForm stDocName, , , stLinkCriteriaExit_Command3_Click:Exit SubErr_Command3_Click: MsgBox Err.Description Resume Exit_Command3_Click End Sub上一页上一页下

8、一页下一页返回首页返回首页返回本章返回本章6.根据需要重复选择对象和过程的操作,直至完成,如图10.7所示;对于 “系统控制窗体”中有七个命令按钮,将对应有七个事件的过程。注意:这七个事件的过程代码同第(5)步,只是在粗体代码stDocName = “商品进货数据录入”中引号之中的窗体名称要做相应更改。上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.7 完成全部事件代码的窗口上一页上一页下一页下一页返回首页返回首页返回本章返回本章创建完窗体类模块以后,可以回到如图10.8所示的“系统控制窗体”窗体视图来单击各个按钮,查看是否运行。操作二 报表类模块创建的步骤如下:此例为“商品库

9、存情况”的报表运行时,根据库存量来显示或隐藏一个提示消息。当商品“库存量”小于10时,将有一个标签在打印此节时显示消息“库存量不足,请速进货!”, 当商品“库存量”大于10时,此标签将被隐藏。1.从数据库窗口“对象”列表中的“报表”对象中选择要操作的报表名,如图10.9所示;上一页上一页下一页下一页返回首页返回首页返回本章返回本章2.然后从“视图”菜单中选择“代码”命令或单击视图中工具栏上的(代码)图标,进入VBE编辑窗口,从模块代码窗口中“对象”列表框中选择要操作的对象名称。此处选择“主体”对象;3.选择对象后,从模块代码窗口中的“过程事件”列表框中选择相关的过程名。选择Format事件。如

10、图10.10所示; 4.在代码窗口中出现的标准过程格式中添加要实现的代码,如图10.11所示; 5.报表预览效果如下图10.12所示。此报表中包含一个名为 “label24”的标签和主体节;上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.8“系统控制窗体”上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.9 选择报表“商品库存情况”报表上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.10选择“对象”和“事件”上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.11添加代码窗口上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10

11、.12 报表预览效果上一页上一页下一页下一页返回首页返回首页返回本章返回本章10.1.2 编写函数和子过程 在普通类模块中可以自定义过程或函数,可以创建自定义的对象。1.函数与子过程的定义在一个不包含过程和函数的模块中声明公共变量和常量,此公共变量和常量可以在任何模块中的任何函数和过程中使用。函数定义的语法结构如下: Function 函数名(参数)AS 数据类型 函数代码 End Function 上一页上一页下一页下一页返回首页返回首页返回本章返回本章子过程定义的语法结构如下: Sub 子过程名() 子程序代码 End sub可以在函数和子过程定义时使用Public、Private或Sta

12、tic前缀来声明子过程和函数的作用范围。 Private前缀表示为私有的子过程和函数,只能在定义它们的模块中使用,Public前缀代表公共的子过程和函数可能被任何其他模块调用,当模块中子过程和函数没有使用Private进行声明,则系统默认为Public(公共)子过程和函数。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章2.创建函数与子过程子过程和函数是指那些不与特定的对象或事件绑定的过程。(1)在代码模块中创建子过程和函数操作步骤如下:A.在“数据库”窗口的对象栏中单击“模块”。B.单击工具栏的“新建”按钮创建新的模块,或者选择一个现有的模块并单击“设计”按钮,打开VBE窗口。C.

13、选择“插入”“过程”命令,或单击工具栏上的“插入模块”按钮的下拉列表三角形,然后选择下拉菜单中的“过程”命令,打 开“添加过程”对话框,如图10.13所示。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.13添加过程对话框上一页上一页下一页下一页返回首页返回首页返回本章返回本章D.键入过程或函数名,此例过程名为“NewSub”。E.选择过程的类型。可以选择新建过程类型为“子程序”、“函数”或者“属性”。F.要使用新建过程适用于整个适用程序,应将范围选为“公共的”;如果要限定过程于当前模块,应该将范围选为“私有的”。G.选择是否需要将过程中所有变量声明为静态变量。H.单击“确定

14、”按钮,确认根据所做选择创建一个新过程。 上述步骤完成后,如果我们在对话框中选择创建一个静态的公共子程序,单击“确定”按钮后,VBE自动在代码中加入如下语句:Public Static Sub NewSub() End sub 光标停留在两条语句的中间,等待用户编加过程代码。 此例为计算1到10的偶数之和。 添加代码如图10.14所示。上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.14编写子过程代码窗口上一页上一页下一页下一页返回首页返回首页返回本章返回本章创建函数过程方法同上,创建好的函数如下图10.14所示。此例函数为判断第几季度。 图10.15编写函数代码窗口上一页上一

15、页下一页下一页返回首页返回首页返回本章返回本章10.1.3将宏转换成模块 宏本身就是程序,只不过是一种控制方法简单的程序而已。那么可以将宏转换为对应的VBA程序,Access数据库管理系统为此提供了两种方式,将宏转换成模块。方法一:在“超市信息管理系统”数据库设计视图的宏对象集合中选中“系统控制窗体宏组”对象,在窗口菜单上单击“文件”“另存为”,即出现如图10.16所示的“另存为”对话框,将对象命名为“系统控制窗体宏组 的副本”,再将保存类型定义为“模块”,单击对话框上的“确定”按钮完成了将宏对象转换为VBA程序模块的操作。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章回到数据库窗

16、口,单击“模块”对象按钮,在“模块”对象集合中会找到“被转换的宏 系统控制窗体宏组”这样的模块,如图10.17所示。方法二:在数据库设计视图宏对象集合中选中“系统控制窗体宏组”,在窗口菜单栏上依次单击“工具” “宏” “将宏转换为Visual Basic代码”命令,随即弹出“转换宏”对话框,如图10.18所示。根据需要在这个对话框中完成两个选项的选定操作后,单击“转换”按钮可将宏对象“系统控制窗体宏组”转换成为一个名为“系统控制窗体宏组 的副本”的模块对象。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.16宏另存为模块对话框 上一页上一页下一页下一页返回首页返回首页返回本章

17、返回本章10.17转换完成的模块对象集合 上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.18转换宏对话框上一页上一页下一页下一页返回首页返回首页返回本章返回本章10.1.4 VBA代码的测试VBA代码的调试由VBE提供调试工具,可以测试代码,查找编写错误。可以在VBE编辑器窗口中,打开将要进行调试的模块,单击“调试”菜单项,可看到调试子菜单项,如图所示,根据子菜单上的命令可以进行调试。调试时,分为两个步骤:断点设置和单步跟踪。1.断点设置 Access提供的大部分调试工具,都必须在程序处于挂起状态才能有效,这时就需要暂停Visual Basic程序代码。如果要使Visual

18、Basic挂起代码,可以设置断点设置断点的方式有两种: (1)在“Visual Basic代码编辑器”的代码窗口中,将光标移 到要设置断点的行。单击调试工具栏上的“切换断点” 按钮“ ”。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章(2)在“Visual Basic代码编辑器”的代码窗口中,用鼠标单击要设置断点行的左侧边缘部分。 如果要清除断点,可以将光标移到设置断点的代码行,然后在调试工具栏上单击“切换断点”按钮。Access在运行到包含断点的代码行时,暂停代码的执行,进入中断模式。设置断点会加粗和突出显示该行。如果要继续运行代码,可以单击调试工具栏上的“运行子过程/用户窗体”

19、按钮“ ”。2.单步跟踪在程序代码挂起后,便可以逐步执行Visual Basic代码,帮助识别发生错误的位置,并且可以查看是否每一行代码都产生了预期 的结果。上一页上一页下一页下一页返回首页返回首页返回本章返回本章用于代码调试的方式有3种:(1)逐语句执行要单步执行每一行代码,包括被调用的过程中的代码,可以单击调试工具栏上的“逐语句”按钮“ ”。(2)逐过程执行要单步执行每一行代码,但是将任何被调用的过程作为一个单位执行,可以单击调试工具栏上的“逐过程”按钮“ ”。(3)跳出执行要运行当前过程中的剩余代码,可以单击调试工具栏上的“跳出” 按钮“ ”,当执行完这个过程,程序返回到调用该过程的 过

20、程后,“跳出”命令执行完毕。上一页上一页下一页下一页返回首页返回首页返回本章返回本章VBA程序设计有几种控制结构:选择控制结构、循环控制结构。选择控制结构有条件结构和选择结构两种。(1)条件结构:只要执行一个语句,则可以使用条件结构。语法如下:if 条件表达式 then 语句1 else 语句2(2)选择结构:在多个语句块中有选择地执行其中的一个。语法如下: Select case 表达式 case 表达式值列表1 语句1 case 表达式值列表2 语句2 case else 语句n End select10.2.1 程序设计上一页上一页下一页下一页返回首页返回首页返回本章返回本章当一个表达式

21、与几个不同的值比较时,可以使用选择结构语句。例:根据某年某月来判断该月有多少天? 图10.19 分支结构窗体 在窗体上三个文本框控件(年份、月份、天数),需要输入年份数和月份数值后回车,或单击“天数”文本框,结果将显示在“天数”文本框内。将代码填加到文本框的“单击”事件中。上一页上一页下一页下一页返回首页返回首页返回本章返回本章Private Sub 天数_GotFocus() num = 月份.Value Select Case num Case 1, 3, 5, 7, 8, 10, 12 天数.Value = 31 Case 4, 6, 9, 11 天数.Value = 30 Case E

22、lse If (年份.Value Mod 4 = 0) And (年份.Value Mod 100 0) Or (年份.Value Mod 400 = 0) Then 天数.Value = 29 Else 天数.Value = 28 End If End Select End Sub 上一页上一页下一页下一页返回首页返回首页返回本章返回本章 2.循环控制语句VBA提供两种循环结构,即DO循环、FOR循环。(1) DO循环:用于重复执行一个语句块,重复次数不定。A)DO WHILE结构,语法如下:DO WHILE 条件表达式循环语句块 LOOP只要表达式为真,循环就一直执行,直到表达式为假时结束

23、循环。B)DO UNTIL结构,语法如下:DO UNTIL 条件表达式循环语句块 LOOP 上一页上一页下一页下一页返回首页返回首页返回本章返回本章 如果表达式为假,执行循环语句块,只要表达式为真时结束循环。(2)FOR循环结构:当不知道循环次数时,最好用DO循环,但如果知道执行的次数,则最好还是用FOR循环。语法如下:FOR 循环控制变量=循环初始值表达式 to 循环终值表达式 STEP 步长数循环语句块NEXT 循环控制变量上一页上一页下一页下一页返回首页返回首页返回本章返回本章例:求阶乘。Option Compare DatabasePublic sPrivate Sub 结果_GotF

24、ocus() Dim intI As Integers = 1For intI = 1 To 数字.Values = s * intINext结果.Value = s End Sub 上例程序可在窗体中显示其结果,如图10.20所示。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章图10.20 阶乘窗体 在窗体中的“输入数值的阶乘”文本框(数字)中输入需要计算乘的数值后回车,或单击下面的文本框(结果),结果显示在“结果”文本框中。 上一页上一页下一页下一页返回首页返回首页返回本章返回本章10.2.2对窗体中控件对象编程一、对标签或文本框编程标签和文本框都可以用来显示文本,但是,标签只

25、能用于显示文字,不能进行编辑,而文本框既可以显示文本,也可以输入文本。1.文本框或标签都有自己的基本属性,来控制文本框或标签的格式、特征和位置。包含以下几个部分的属性: (1)外观属性 包含:BackColor 、ForeColor 、BorderStyle属性 (2)位置属性 包含:Height、 Left、 Top、 Width属性上一页上一页下一页下一页返回首页返回首页返回本章返回本章(3)行为属性包含:Enabled、IMEMode、 Locked 、ScrollBars 、 TabIndex 、TabStop、 Visible属性。(4)杂项 包含:Name、 HelpContext

26、Id、 Text属性(5)字体属性 包含一些与文本框中字体相关的属性: FontBold、 FontItalic 、FontName、 FontSize 、FontUnderline、 FontWeight 、Format属性。2.文本框控件又有自己的基本事件和方法(1)数据响应类型事件 包含:AfterUpdate 、BeforeUpdate、 Change事件 上一页上一页下一页下一页返回首页返回首页返回本章返回本章(2)鼠标动作类事件包含:Click 、DblClick、 MouseDown、 MouseUp、 MouseMove、 MouseMove事件(3)焦点类事件包含:Enter 、Exit、Gotfocus、 LostFocus事件(4)键盘响应类事件包含:KeyUp 、KeyPress事件 3.标签控件事件和方法标签控件的事件要相对其它控件要少很多,主要有五个:MouseMove 事件、Mou

温馨提示

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

最新文档

评论

0/150

提交评论