模块与VBA编程基础_第1页
模块与VBA编程基础_第2页
模块与VBA编程基础_第3页
模块与VBA编程基础_第4页
模块与VBA编程基础_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

中国政法大学科学技术教学部王宝珠Access数据库应用技术第8章模块和VBA编程基础目录一、理解模块的概念和分类二、熟悉VBA编程的界面学习目标通过本章的学习,应该掌握三、熟悉VBA的基本概念和基本语法四、掌握模块的创建方法和使用五、基本程序控制语句六、VBA程序调试方法重点和难点VBA功能和基础知识创建模块创建过程创建VBA程序运行VBA程序主要内容8.1认识模块对象8.2模块的创建8.3VBA编程基础Access数据库应用技术8.1认识模块对象定义:模块对象是Access数据库管理系统中的一个独立单元,它实际上是一个由若干个VBA代码组成的过程。可以把模块理解为是装着VBA程序代码的容器。模块的分类:

1.类模块类模块是可以定义新对象的模块。新建一个类模块,也就是创建了一个新对象。模块中定义的过程将变成该对象的属性或方法。类模块可以独立存在,也可以与窗体或报表同时出现。窗体和报表模块都是类模块,它们各自与某个窗体或报表相关联。

2.标准模块标准模块包括通用过程和常用过程,它们不与任何对象相关联,并且可以在数据库中的任何位置运行。8.2模块的创建

【实例】创建一个能在屏幕上显示“大家好,欢迎走进Access”的提示框的模块,模块名称为“示例模块”。8.2.1创建模块与过程1.模块的创建操作要点(1)打开数据库。(2)选择数据库窗口中的“模块”对象。(3)选择菜单栏上的“工具”→“宏”→“VisualBasic编辑器”命令,打开VisualBasic编辑器窗口。(4)选择菜单栏上的“插入”→“模块”命令,Access打开新的模块定义窗口。(5)在新的模块定义窗口中输入代码,然后保存。VisualBasic编辑器窗口和示例模块运行结果2.过程的创建

定义:过程是包含VBA代码的基本单位,是一段相对独立的代码,完成一个特定任务。一个较大的任务通常由多个过程组成。其语法结构如下:

Sub过程名[(形参列表)]

[语句块]

EndSub

【实例】新建模块,实现输入两个整数,并按从小到大排序输出。操作要点:(1)打开数据库。(2)选择数据库窗口中的“模块”对象。(3)单击数据库窗口工具栏上的“新建”按钮,弹出VisualBasic编辑器窗口。(4)选择菜单栏上的“插入”→“过程”命令,打开“添加过程”对话框,并按照对话框输入相应信息。(5)单击工具栏上的“保存”按钮,保存模块。8.2.2编写事件过程

【实例】在“密码输入”窗体中添加一个命令按钮,并为该按钮编写事件过程,检测输入的密码是否正确,如不正确弹出输入密码错误消息框。操作要点:

(1)建立窗体,并命名为“密码输入”,如下图所示。操作要点:(2)单击“密码检测”按钮控件,弹出一个模块的快捷菜单,如右图所示。在菜单中选择“事件生成器”命令。操作要点:

(3)在弹出的“选择生成器”对话框中,选择“代码生成器”选项,然后单击“确定”按钮,如下图所示。操作要点:(4)屏幕由Access窗口切换到VisualBasic代码窗口,输入代码。下图所示窗体为模块代码窗口8.2.3过程的调用过程调用的语句结构如下:格式1:Call子过程名[(形参列表)]格式2:子过程名[(形参列表)]8.3VBA编程基础8.3.1VBA程序设计的基本概念

VBA程序设计是一种面向对象的程序设计。面向对象程序设计是一种系统化的程序设计方法,它基于面向对象模型,采用面向对象的程序设计语言编程实现。同其他任何面向对象的编程语言一样,VBA里也有对象、属性、方法和事件。所谓对象,就是代码和数据的组合,可将它看作单元。例如,表、窗体或文本框等都是对象。每个对象由类来定义。所谓属性,是指定义的对象特征,如大小、颜色、对象状态等。所谓方法,是指对象能执行的动作,如刷新。所谓事件,就是一个对象可以辨认的动作。如单击鼠标或者按下某个按键,并且可以编写一些代码针对这个动作来做出响应。9.2.3

对象的方法(续)

Access应用程序的各个对象都有一些方法可供调用。在VBE窗口中,输入某一对象名及“.”后弹出的“属性及方法”列表框中,列出了该对象可用的的属性名或方法名。

此外,Access还提供一个重要的对象:DoCmd对象。它的主要功能是通过调用包含在内部的方法来实现

VBA编程中对Access的操作。

例如,利用DoCmd对象的OpenReport方法来打开“课程信息”报表的语句格式为:

DoCmd.OpenReport"课程信息"9.2.4

对象的事件事件是Access窗体或报表及其上的控件等对象可以“辩识”的动作,是对象对外部操作的响应,如在程序执行时,单击命令按钮会产生一个Click事件。事件的发生通常是用户操作的结果。事件在某个对象上发生或对某个对象发生。

Access可以响应多种类型的事件:鼠标单击、数据更改、窗体打开或关闭及许多其他类型的事件。8.3.2VBA的数据类型Byte字节

Integer整型

Boolean是/否

Long&长整型

Single单精度Double双精度Currency货币

String文本或备注

Date日期/时间

Variant任何

8.3.3VBA常量、变量和表达式1.常量常量是固定不变的,也不能赋予新值。Access支持3种类型的常量:符号常量、系统定义常量和固有常量。

(1)符号常量需要声明的常量都是符号常量。声明常量的关键字为Const,其语法格式是:[public/private]Const常量名[As类型]=表达式【实例】声明一个在所有模块中使用的常量PI。其语句格式为:PublicconstPIAsDouble=3.1415926(2)系统定义常量:系统定义常量有三个值,它们是True、False和Null。(3)固有常量:是Access或引用对象库的一部分,由Access自动定义,并且由程序列与控件提供。用户若需要使用该常量,可以使用“对象浏览器”来查看所有对象库中的固有常量列表。2.变量定义:在程序中可改变的量。分类:内存变量字段变量命名:其名称均可用字母、汉字、数字和下划线组成。变量名的第一个字符必须是英文字母,长度不得超过255个字符,并且变量名不能与命令和函数名相同。变量声明:其语法格式为:

[Dim/public/private]变量名As数据类型【实例】声明一个名为string1的本地变量,并给该变量赋值,其值为一个字符串“你好!”。其语句格式为:Dimstring1Asstring

//声明一个名为string1的变量string1="你好!"//给变量赋值9.4.6数据库对象变量

Access建立的数据库对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用。

Access中窗体与报表对象的引用格式分别为:

Forms!窗体名称!控件名称[.属性名称]Reports!报表名称!控件名称[.属性名称]关键字Forms表示窗体对象集合,Reports表示报表对象集合。英文的感叹号“!”分隔开父子对象。若省略“属性名称”部分,则默认为控件的基本属性Value。如果在本窗体的模块中引用,可以使用Me代替Forms!窗体名称,窗体对象的引用格式变为:

Me!控件名称[.属性名称]9.4.6数据库对象变量(续)例如,要在VBA代码中引用窗体“学生资料”中名为“学号”的文本框控件,可使用下面三个语句之一:(注:下面这三个语句的效果是一样的。)

Forms!学生资料!学号.Value="08031001"

Forms!学生资料!学号="08031001"

Forms!学生资料![学号]="08031001"

省略属性名称.Value用英文方括号括住文本框控件名“学号”9.4.6数据库对象变量(续)例如,如果在窗体“学生资料”的模块中,引用本窗体“学生资料”中名为“学号”的文本框控件,可以使用Me代替Forms!学生资料,则上例中的三个语句变为:

Me!学号.Value="08031001"或

Me!学号="08031001"或

Me![学号]="08031001"用Me代替Forms!学生资料9.4.6数据库对象变量(续)此外,还可以使用Set关键字来建立控件对象的变量。当需要多次引用对象时,这样处理很方便。例如,要多次操作引用窗体“学生资料”中的控件“姓名”的值时,可以使用以下方式:DimtxtNameAsControl‘定义控件类型变量SettxtName=Forms!学生资料!姓名txtName="刘娟娟"‘操作对象变量借助将变量定义为对象类型并使用Set语句将对象指派到变量的方法,可以将任何数据库对象指定为变量的名称。当指定给对象一个变量名时,不是创建而是引用内存的对象。请在p235第7行首

im

之前补加D3.表达式定义:表达式是对数据加工的具体实现,它是由常量、变量、函数和运算符组成的一个有意义的最基本的运算式子,对数据进行加工常常可以用一些简单的符号来描述,这些符号称为运算符。常用运算符:运

算运

符表达式示例算术运算乘方(^)、乘(*)、除(/)、取余(Mod)、加(+)、减(-)2^3+5关系运算小于(<)、大于(>)、等于(=)、小于等于(<=)、大于等于(>=)、不等于(<>)X<>12345逻辑运算非(NOT)、与(AND)、或(OR)Y>=0ANDY<=100字符串运算字符串连接符(+)、(&)"ab"+"cd"或者

"ab"&"cd"对象运算引用用户自定义的内容(!)、引用Access定义的内容:.Reports![登录].Visible8.3.4VBA程序结构

在VBA程序设计中,程序的流程一般分为3种:

1.顺序结构2.分支结构3.循环结构。缺省值标题题提示3.2简单的输入输出

1.InputBox函数变量名=InputBox[$](<提示信息>[,<标题>][,<缺省>][,<x坐标>][,<y坐标>])

其中:提示提示信息,标题标题区显示,缺省输入区缺省值有$返回字符类型,否则为数值类型.

例如,要在屏幕上显示如下的对话框:

例如:有下列语句如下:DimstrNameAsString*40,strS1AsString*40strS1=“请输入你的姓名”+Chr(13)+Chr(10)+“然后单击确定”

strName=InputBox$(strS1,“输入框”,,100,100)

当键盘输入“王晓明”后,变量strName获得键盘输入的值.缺省值标题题提示2.MsgBox函数和MsgBox过程

函数形式:变量[%]=MsgBox(提示[,按钮[+图标]+[缺省按钮]+[模式]][,标题])

过程形式:MsgBox

提示[,按钮[+图标]+[缺省按钮]+[模式]][,标题]图标标题提示信息命令按钮(1)简单选择语句最简单的选择语句格式如下:If条件Then语句1[Else语句2]分支语句:【实例】编写程序,用立即窗口来输出结果。如果x大于或等于y,则打印“x>=y”,否则打印“x<y”。DimxAsInteger,yAsIntegerx=5y=1Ifx>=yThenDebug.Print"x>=y"Debug.Print"x<y"If条件Then

语句组[Else语句]Endif或者If条件Then

语句组1Else

语句组2Endif(2)结构化的选择语句【实例】若x表示学生成绩,编程用立即窗口来输出成绩合格或不合格。DimxAsIntegerx=20Ifx>=60ThenDebug.Print"合格"ElseDebug.Print"不合格"Endif由于x=20,所以执行Else后的语句,结果为:不合格。【实例】若x表示学生成绩,编程为该成绩划分等级。90分以上为优秀,80分以上为良好,70分以上为中等,60分以上为及格,60分以下为不及格。DimxAsIntegerx=95Ifx>=90ThenDebug.Print"优秀"

ElseIfx>=80ThenDebug.Print"良好"

ElseIfx>=70ThenDebug.Print"中等"

ElseIfx>=60ThenDebug.Print"合格"

ElseDebug.Print"不合格"

EndifEndifEndifEndif由于x=95,将在立即窗口显示结果:优秀。选择语句的嵌套形式

(3)多分支选择语句语句结构如下:SelectCase测试条件

Case条件1语句1

Case条件2语句2…

Case条件n

语句n[CaseElse

语句n+1]EndCase【DimxAsIntegerx=95SelectCasexCase90To99

MsgBox"优秀"Case80To89

MsgBox"良好"Case70To79

MsgBox"中等"Case60To69

MsgBox"合格"CaseElse

MsgBox"不合格"EndSelect【实例】用SelectCase语句编程,完成上例的要求。

Case表达式可以有以下多种形式:单个值或一列值,相邻两值之间用逗号隔开;例如,Case1,2,3。用关键字To指定值的范围,其中第一个值不应大于第二个值,对字符串将比较它的第一个字符的ASCII码大小。使用关键字Is指定条件。Is后紧接关系运算符(如<、>、=、<=、>=和<>)和一个变量或值,例如,CaseIs>=90。说明:举例:

DimxAsIntegerx=95SelectCasexCaseIs>=90

MsgBox"优秀"CaseIs>=80

MsgBox"良好"CaseIs>=70

MsgBox"中等"CaseIs>=60

MsgBox"合格"CaseElse

MsgBox"不合格"EndSelect循环结构

(1)While…Wend循环语句While…Wend循环语句是当条件成立时执行循环体称为当型循环,其语句结构如下:While条件

循环体WendDimsAsInteger,iAsIntegers=0i=0Whilei<10i=i+1s=s+iWendDebug.Print"1+2+3+…+10=";s【实例】编写程序,计算1+2+3+…+10的和。DoWhile…Loop循环与While循环都是当型循环,先判断条件,当条件成立时执行循环体。其语句结构如下:DoWhile条件循环体Loop(2)DoWhile…Loop语句DimsAsInteger,iAsIntegers=0i=0DoWhilei<10i=i+1s=s+iLoopDebug.Print"1+2+3+…+10=";s

【实例】用DoWhile…Loop循环语句改写例8-10。For…Next循环语句常用于循环次数已知的程序中。其语句结构如下:For循环控制变量=初值To终值

[Step步长]

循环体Next(3)For…Next循环语句①

将初值赋给循环控制变量。②

判断循环控制变量是否在初值与终值之间。③

如果循环控制变量超出范围,则跳出循环,否则继续执行循环体。④

在执行完循环体后,将执行Next语句,该语句将循环控制变量加上步长后再赋给循环控制变量,其含义用语句表示:循环控制变量=循环控制变量+步长⑤

在循环控制变量加上步长后再返回第2步继续执行。For循环的循环次数可以使用如下公式计算:循环次数=(终值-初值)/步长+1For循环执行步骤如下:DimsAsInteger,iAsIntegers=0Fori=1To10

s=s+iNextDebug.Print"1+2+3+…+10=";s注意:改变循环的条件已交给Next语句。

【实例】用For…Next循环语句改写例8-10。ForEach…Next语句用于对一个集合中的每个元素执行一次循环,直到集合中无更多元素时。其语句结构如下:ForEach集合中的元素in集合

循环体Next(4)ForEach…Next语句ForEachbina()IfbMod2=0Then

Debug.PrintbEndIfNext【实例】编写程序,将数组A中的偶数元素输出。1.进入程序编辑器VBE8.3.5VBA编程环境

方法一:操作步骤如下:(1)打开“学籍管理”数据库。(2)在Access中,选择菜单栏上的“工具”→“宏”→“VisualBasic编辑器”命令。方法二:(1)打开“学籍管理”数据库。(2)在“学籍管理”数据库窗口中,选择“模块”为操作对象,单击工具栏的“新建”按钮。打开VisualBasic编辑器,并创建了一个空白模块。

VBA操作界面标题栏标准工具栏菜单栏模块代码窗口工程资源管理器窗口模块属性窗口监视窗口本地窗口立即窗口VBE窗口中的“视图”菜单1.标准工具栏视图MicrosoftOfficeAccess切换Access数据库窗口。插入模块用于插入新模块。运行子过程/用户窗体运行模块程序。中断中断正在运行的程序。终止运行/重新设计结束正在运行的程序,重新进入模块设计状态设计模块设计模块和非设计模块切换。工程资源管理器打开工程资源管理器窗口。属性窗口打开属性窗口。对象浏览器打开对象浏览器窗口。2.工程资源管理器窗口单击VBE窗口菜单栏中的“视图”菜单中的“工程资源管理器”命令,即可打开工程资源管理器窗口。工程资源管理器窗口简称工程窗口。在工程窗口中的列表框当中列出了应用程序的所有模块文件。单击“查看代码”按钮可以打开相应代码窗口,单击“查看对象”按钮可以打开相应对象窗口,单击“切换文件夹”按钮可以隐藏或显示对象分类文件夹。双击工程窗口上的一个模块或类,相应的代码窗口就会显示出来。3.属性窗口单击VBE窗口菜单栏中的“视图”菜单中的“属性”命令,即可打开属性窗口。在属性窗口中,列出了所选对象的各个属性,分“按字母序”和“按分类序”两种查看形式。可以直接在属性窗口中编辑对象的属性,这属于对象属性的“静态”设置方法;可以在代码窗口内用VBA代码编辑对象的属性,这属于对象属性的“动态”设置方法。注意:为了在属性窗口中列出Access类对象,应首先打开这些类对象的“设计”视图。4.代码窗口

单击VBE窗口菜单栏中的“视图”菜单中的“代码窗口”命令,即可打开代码窗口。可以使用代码窗口来编写、显示以及编辑VBA程序代码。实际操作时,在打开各模块的代码窗口后,可以查看不同窗体或模块中的代码,并且在它们之间做复制以及粘贴的动作。5.立即窗口

单击VBE窗口菜单栏中的“视图”菜单中的“立即窗口”命令,即可打开立即窗口。在立即窗口中,可以键入或粘贴一行代码,然后按下ENTER键来执行该代码。但是立即窗口中的代码是不能存储的。若在立即窗口键入“Print19Mod7”,则在下一行输出的结果是5。若在立即窗口键入“?19Mod

温馨提示

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

评论

0/150

提交评论