8模块及 VBA程序设计.docx

上传人:b****4 文档编号:6772610 上传时间:2023-05-10 格式:DOCX 页数:37 大小:313.58KB
下载 相关 举报
8模块及 VBA程序设计.docx_第1页
第1页 / 共37页
8模块及 VBA程序设计.docx_第2页
第2页 / 共37页
8模块及 VBA程序设计.docx_第3页
第3页 / 共37页
8模块及 VBA程序设计.docx_第4页
第4页 / 共37页
8模块及 VBA程序设计.docx_第5页
第5页 / 共37页
8模块及 VBA程序设计.docx_第6页
第6页 / 共37页
8模块及 VBA程序设计.docx_第7页
第7页 / 共37页
8模块及 VBA程序设计.docx_第8页
第8页 / 共37页
8模块及 VBA程序设计.docx_第9页
第9页 / 共37页
8模块及 VBA程序设计.docx_第10页
第10页 / 共37页
8模块及 VBA程序设计.docx_第11页
第11页 / 共37页
8模块及 VBA程序设计.docx_第12页
第12页 / 共37页
8模块及 VBA程序设计.docx_第13页
第13页 / 共37页
8模块及 VBA程序设计.docx_第14页
第14页 / 共37页
8模块及 VBA程序设计.docx_第15页
第15页 / 共37页
8模块及 VBA程序设计.docx_第16页
第16页 / 共37页
8模块及 VBA程序设计.docx_第17页
第17页 / 共37页
8模块及 VBA程序设计.docx_第18页
第18页 / 共37页
8模块及 VBA程序设计.docx_第19页
第19页 / 共37页
8模块及 VBA程序设计.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

8模块及 VBA程序设计.docx

《8模块及 VBA程序设计.docx》由会员分享,可在线阅读,更多相关《8模块及 VBA程序设计.docx(37页珍藏版)》请在冰点文库上搜索。

8模块及 VBA程序设计.docx

8模块及VBA程序设计

模块及VBA程序设计

二级ACCESS笔试的重点难点在VBA程序设计部分,分值占到了35分左右,主要考察模块基本概念、面向对象程序设计基本概念、运算符和表达式、VBA程序流程控制语言、常用函数和操作,其中考查密度最大的就是运算符和表达式、流程控制、常用函数。

一、模块的基本概念

(1)模块的基本概念

模块是Access数据库7个对象之一,由面向对象的VBA程序构成。

模块具有很强的通用性,窗体、报表等对象都可以调用模块内部的过程。

模块基本上是由子过程(Sub)、函数过程(Function)作为命名的单元存储在一起的集合,对VBA代码进行组织。

Access有两种类型的模块:

标准模块和类模块。

(2)标准模块

1、标准模块包含的是通用过程和常用过程,这些通用过程不与任

何对象相关联,常用过程可以在数据库中的任何位置运行。

2、标准模块中的公共变量和公共过程具有全局特性,作用域(作用范围)在整个应用程序,生命期伴着应用程序运行而开始、关闭而结束。

说明:

作用范围(作用域):

变量或过程在整个程序代码中并不总是有效/可用的,而限定该变量或过程的可用性的代码范围就是该变量或过程的作用域。

作用域决定了生命期。

(3)类模块

1、类模块包括窗体模块和报表模块,它们各自与某一特定窗体或报表相关联。

2、作用范围限于所属窗体或报表内部,生命周期也随窗体或报表的打开而开始、关闭而结束。

3、类模块可以调用标准模块中定义好的过程。

(4)模块的基本组成单元简介

过程是模块的组成单元,由VBA代码编写而成。

过程分两种类型:

Sub子过程和Function函数过程。

1、Sub子过程,基本定义方式如下

Subsubname(参数1,参数2,…)

变量声明部分

操作语句部分

EndSub

可执行一系列操作,无返回值。

可在该子过程之外用CALL调用:

Callsubname(参数)。

2、Function函数,基本定义方式如下

FunctionFunctionName(参数)

变量声明部分

操作语句部分

EndFunction

可执行一系列操作,有返回值。

返回值直接利用函数名调用获得,调用x=FunctionName(参数)。

说明:

1、返回值:

函数过程在执行过程中,对其输入的参数进行计算,将得到一个结果,这个结果可以递交给使用他们的代码。

2、子过程和函数过程定义都是有开始,有结尾的.

二、模块创建和VBA编程环境VBE

模块和过程的创建方法、VBA编程环境(VBE界面)介绍。

(一)VisualBasic编辑器:

VisualBasic编辑器VBE(VisualBasic

Editor)是编辑VBA代码时使用的界面。

VBE窗口主要由标准工具栏、

工具窗口、属性窗口、代码窗口和立即窗口等组成。

(二)进入VBA编程环境:

Access模块分成类模块和标准模块两种。

1、对于类模块,可以直接定位到窗体或报表,然后单击工具栏上的“代码”按钮进入;或定位到窗体、报表和控件上通过指定对象事件处理过程进入。

其方法有两种:

(1)右键单击控件对象,单击快捷菜单上的“事件生成器命令”,打开“事件生成器”对话框,选择其中的“代码生成器”,单击“确定”按钮即可进入;

(2)单击属性窗口的“事件”选项卡,选中某个事件直接单击属性右侧的“…”按钮,打开“事件生成器”对话框,选择其中的“代码生成器”,单击“确定”按钮即可进入。

2、对于标准模块,有3种方法进入:

(1)对已存在的标准模块,只需从数据库窗体对象列表上选择“模块”,双击要查看的模块对象即可进入;

(2)要创建新的标准模块,需要从数据库窗体对象列表上选择“模块”,单击工具栏上的“新建”按钮即可进入;

(3)在数据库对象窗体中,选择“工具”菜单里“宏”子菜单的“Visual Basic编辑器”选项即可进入。

(三)VBE环境中编写VBA代码

·VBA代码是由语句组成的,一条语句就是一行代码。

例如

intCount=3’将3赋值给变量intCount

Debug.PrintintCount’在立即窗口打印变量intCount的值3

·Access的VBE编辑环境提供了完整的开发和调试工具。

其中的代码窗口顶部包含两个组合框,左侧为对象列表,右侧为过程列表。

操作时,从左侧组合框选定一个对象后,右侧过程组合框中会列出该对象的所有事件过程,再从该对象过程列表选项中选择某个事件名称,系统会自动生成相应的事件过程模块,用户添加代码即可。

双击工程窗口中的任何类或对象都可以在代码窗口中打开相应代码进行编辑处理。

三、面向对象编程基本概念

ACCESS中的VBA是面向对象的语言,可以方便有效的使用各种对象(数据表、查询、宏、报表、数据访问页等)。

面向对象是当前最主要的程序设计方法,可大幅度提高软件开发的质量和速度。

(1)对象与类

1、对象:

对象是基本的运行时的实体,如窗体、报表、各种控件

等,每个对象具有各自的属性、方法和事件。

2、类:

是对一类相似对象的定义和描述。

因此类可看做是对象的模板,对象是类的实例化。

类与对象是面向对象程序设计语言的基础。

说明:

现实世界中,具有相同特征(属性)的事物就可以规为一类。

例如人、学生、汽车等等。

而一个类的对象,就是属于这个类的,现实事物中客观存在并区别与其它事物的个体,比如学生是一个类,而一个具体的学生如“张三”就是学生的一个对象了。

(2)对象的属性和方法。

属性指用来描述和反映对象特征的参数。

如:

控件名称(Name)、标题(Caption)、颜色(Color)、字体(FontName)等属性决定了对象展现给用户的界面具有什么样的外观及功能。

方法指对象的行为,是一种特殊的过程和函数,能完成某些动作。

如窗体有Refresh方法,Debug对象有Print方法等。

1、对象属性设置的方法:

<1>在设计模式下,通过属性窗口直接设置对象的属性。

<2>在程序的代码中通过赋值实现,其属性的引用格式为:

对象.属性。

例:

Label10.Caption=“显示”

2、对象方法的使用格式为:

对象.方法[参数列表]

例1:

Debug.print"ACCESS"

在立即窗口中打印文字“ACCESS”,这里Debug是ACCESSa中用于调试的对象,而Print则是Debug对象的一个方法,用于将后面的内容打印在立即窗口中。

例2:

DoCmd.OpenReport“教师信息“

(3)VBA中引用ACCESS对象。

1、Forms(或Reports)!

窗体(或报表)名称!

控件名称[.属性名]

说明:

1、笔试中经常考查VBA中如何使用窗体、报表上控件的值,又或者如果获取、更改窗体、报表上控件的值。

2、上面语法中,Forms或Reports分别表示窗体或报表对象集合。

感叹号“!

”分隔开对象名称和控件名称。

“属性名称”部分默认(即在控件名称后不添加属性)时,表示该控件的值。

3、如果在一个窗体、报表、宏中使用另一窗体或报表上的控件时,应该使用上述完整语法。

4、如果窗体、报表中使用自己窗体、报表上的控件时,采部分语法:

控件名称[.属性名]。

该语法只用到了控件名和其属性,因为此时系统知道该控件就是在当前窗体中。

例如:

如果现在有两个窗体Form1、Form2,在Form2窗体上有一标签文本框名称为“Text1”则。

在窗体Form1中设置Form2上的控件Text1的值为10

Forms!

Form2!

Text1.Value=10或者Forms!

Form2!

Text1=10

Form2自己的设置Text1的值为10

Text1.Value=10或者Text1=10或者Me!

Text1.value=10

上面表达式中“Me”为ACCESS一个对象,表示当前窗体它自己。

VBA中常涉及到的控件属性

属性名称

说明

Name

(名称)返回或设定对象的名字

Caption

(标题)返回或设定对象的标题文字

Controlsource

(数据源)指定控件显示的数据源

Decimalplaces

(格式)指定显示的小数位数

Defaulvalue

(默认值)设定控件的默认值

Visible

(可见性)控件或窗体、报表是否可见

Value

(值)控件中的值,对于文本框、组合框等控件

Height、Width

(高、宽)设定控件的大小

Left、Top

(左、右边距)设定控件在窗体或报表中的位置

Forecolor

(前景颜色)指定控件中显示内容的文字颜色

Backcolor

(背景颜色)指定控件或节的颜色

fontName、FontSize

(字体名称、字体大小)设定字体及字体大小

Enabled

控件是否接受焦点和响应用户操作

Text

设置或返回文本框、组合框中的文本

(4)事件(Event)及事件过程(EventProcedure)。

1、事件:

可被对象识别的动作。

如:

窗体打开Open,单击Click,双击DblClick等。

2、事件过程:

是对象事件触发后处理的程序代码。

事件过程的形式如下:

Sub对象名_事件过程名[(参数列表)]

…..(事件过程代码)

EndSub

例如:

下面是窗体的时钟事件过程,其过程中的代码实现将当前系统时间显示在标签中。

SubForm_Timer()

Labeltime.Caption=CStr(Now())

EndSub

常见事件:

窗体和控件可以采用各种事件来响应用户的操作和指令。

1、键盘事件:

键按下(KeyDown)、键释放(KeyUp)、击键(KeyPress)

2、鼠标事件:

单击(Click)、双击(DblClick)、鼠标按下(MouseDown)、鼠标移动(MouseMove)、鼠标释放(MouseUp)

3、对象事件:

获得焦点(GotFocus)、失去焦点(LostFocus)、更新前(BeforeUpdate)、更新后(AfterUpdate)、发生更改(Change)

4、窗体事件:

打开(Open)、加载(Load)、关闭(Close)、释放(Unload)

5、操作事件:

删除(Delete)、插入前(BeforeInsert)、插入后(AfterInsert)、成为当前(Current)、确认删除前(BeforeDelConfirm)、确认删除后(AfterDelConfirm)、不在列表中(NotInList)。

四、VBA程序设计基础

(1)VBA代码编码规则(必须掌握)

1、VBA代码中不区分字母的大小写。

2、一条语句写完后不需加任何结束符。

3、同行上可以书写多条语句,语句间要用冒号“:

”分隔。

4、若一个语句行不能写下全部语句时,可以换行。

换行时需在本行后加入续行符,1个空格加下划线“_”。

5、一行最多允许255个字符。

6、注释以Rem开头,也可以使用单引号“'”,注释内容可直接出现在语句的后面。

7、在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。

编码规则举例

1、LABEL10与label10相同,即大小写相同。

2、x=y+z:

y=z+x:

z=y+x在同一行写了三个语句,用“:

”分隔。

3、MyVar=“这是一个"_

&“例子说明如何"_

&“续行代码“空白加下划线(_)可接续两行以上的代码。

4、‘Thisisacomment.(’)引导注释文本

RemThisisacommentRem引导注释文本

5、IfNumber=1ThenGoToLine1ElseGoToLine2Endif

Line1:

标号1

MyString=“数值等于1“

Line2:

标号2

MyString="数值等于2"

(2)数据类型-VBA标准数据类型

数据通过程序进行处理。

而我们知道,现实生活中的数据表现形式是多种多样的(比如数字、文本、图片、声音、视频等等),这些不同形式的数据要存储在计算机中,计算机才能进行相关处理。

不同形式的数据,其组织、大小、以及处理方法都是不一样的。

所以,程序必须对不同形式的数据进行区分、有效管理、存储。

对数据进行分类,就是数据的数据类型。

类型

类型符

字段类型

字节

Byte(单字节型)

1

Integer(整型)

%

字节/整数/是否

2

Long(长整型)

&

长整型/自动编号

4

Single(单精度型)

!

单精度数

4

Double(双精度型)

#

双精度数

8

Currency(货币型)

@

货币

8

String(字符型)

$

文本

n*1

Boolean(布尔型)

是/否

2

Date(日期型)

日期/时间

8

Variant(变体型)

任何

按需分配

Object(对象型)

4

关于数据类型注意要点:

1、上表中的数据类型同学们必须掌握6个类型符,类型符几乎每届必考。

2、Boolean数据类型:

值只能是True或是False。

当转换其他的数值类型为Boolean值时,0会转成False,而其他的值则变成True。

当转换Boolean值为其他的数据类型时,False成为0,而True成为-1。

3、Date数据类型:

日期须以数字符号(#)扩起来,例如,#2008-3-23#

4、Object数据类型:

利用Set语句,声明为Object的变量可以赋值为任何对象的引用。

5、Variant数据类型:

所有没被显式声明(用如Dim、Private、Public或Static等语句)为其他类型变量的数据类型。

Variant是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据,以及Empty、Error、Nothing及Null等特殊值。

可以用VarType函数(变量类型)或TypeName(类型名)函数来检查Variant中的数据实际类型。

7、Byte数据类型:

取值范围0—255

(3)数据类型之间的转换

在进行VBA编程过程中,用户可以将一种数据类型的数据转换成另一种特定类型的数据。

例如通过窗体上的文本框获取的值一般为文本类型(String),如果输入的是数字,此时必须转换为文本类型;又如对于字符串”2010-3-15”,如果我们想把它作为时间/日期类型进行时间计算,就必须把它转换为日期类型#2010-3-15#。

类型转换通过转换函数完成。

函数名

目标类型

示例

Cbyte

Byte

Cbyte(125.5678)=126舍入小数到整数

Cint

Integer

Cint(1.35)=1,Cint(1.55)=2四舍五入

Clng

Long

Clng(1.35)=1

Csng

Single

Csng(125)=125.0

Cdbl

Double

Cdbl(125)=125.0

Ccur

Currency

Cdate

Date

Cdate(“2008-3-25”)=#2008-3-35#

Cvar

Varriant

Cbool

Boolean

CBool(0)=false、CBool

(1)=True

Cstr

String

Cstr(125.25)=“125.25”

说明:

Cint(False)=0,Cint(True)=-1。

(4)标识符及其命名规则

所谓标识符,是编程时使用的各种对象的名字。

我们指定某个东西、人,都要用到它、他或她的名字。

同理,在计算机中,对使用变量,常量,函数,语句块也有名字,我们统统称之为标识符。

标识符

的命名有一定的规则,就像我们的名字是由姓+名构成的一样。

VBA程序中常量、变量、过程等对象的名字标识符命名规定如下:

1、第一个字符必须是字母或下划线“_”

2、包含的字符数不超过255个

3、不得与VBA的关键字同名,如不能使用Sub、For等

4、不能使用下列字符:

!

@&$#(空格)

说明:

1、关键字:

在VBA中系统定义的有着特殊含义的标识符。

2、注意,上面规则中最为常考的规则是第1、第4条规则。

3、表示符举例:

5abc,ab!

c都是错误的标识符。

(5)常量

在程序运行过程中,其值不能被改变的量称为常量。

VBA中有三类常量:

普通常量、符号常量、系统常量。

1、普通常量

整型常量:

10、110%(整型)、23&(长整型)

实型常量:

0.123!

(单精度)、-1.123#(双精度)、1.25E+3、-1.25E-3

字符串常量:

“ABD”、“XYZ、”大家好”

逻辑常量:

ture、false

日期常量:

#2002-5-414:

30:

00PM#、#09/02/99#

2、符号常量

在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。

符号常量定义的语法:

Const常量名[As类型或类型符号]=常数表达式

例如:

ConstPI#=3.1415926535与ConstPIAsDouble=3.1415926535定义方式相同。

都表示定义了一个双精度类型的符号常量PI,其值为圆周率3.1415926535。

现在无论在程序的任何地方,PI都表示3.1415926535,并且不能重新给PI赋值改变其值,如让PI=3.14是错误的。

3、系统常量

VBA系统提供了应用程序和控件的系统定义常数。

它们存放于系统的对象库中,在“对象浏览器”中能查看这些常数。

(不用记忆)

Eg:

常数值描述

vbBlack0x0黑色

vbSunday1星期日

(6)变量

程序中的变量为临时存储单元,可存放文字、数值、日期和对象属性。

每个变量都有一个名字,程序通过变量名对变量进行存取操作。

顾名思义,变量的值在程序执行期间是可以更改的。

1、用Dim语句显式声明变量

声明语法:

Dim变量名[AS类型]或Dim变量名[类型符]

要点:

声明的每个变量都要一个单独的As类型子句,没有的作为变体类型(Variant)

例1:

DimiCountAsinteger,sumAssingle声明了一个整型变量iCount,一个单精度变量sum

等价于:

DimiCount%,sum!

采用类型符号声明方式

例2:

DimiCountAsinteger,sum,nameasstring*10

声明了三个变量,其中icount为整型,sum为变体型(后面没有AS),name为文本类型

2、隐式声明变量

VBA允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。

所有隐式声明的变量都是Variant数据类型。

VBA根据程序中赋予变量的值来自动调整变量的类型。

例如:

变量a,b,Sum都没有事先定义。

PrivateSubForm_Click()

Sum=0

a=10:

b=20

Sum=a+b

debug.Print"Sum=“&Sum

EndSub

3、强制显式声明变量—OptionExplicit

VBA中可以强制显式声明,在窗体模块、标准模块和类模块的通用声明段中加入:

OptionExplicit,则变量必须声明才能使用。

(7)变量的作用域和生命周期

VBA中,变量定义的位置和方式不同,则变量的作用域与生命期也有所不同。

变量作用域的三个层次:

局部范围(过程级别)、模块范围、全局范围

1、局部范围(过程级别):

定义在模块的过程内部,只有在声明此变量的过程中才可使用。

<1>DimxAsSingl:

用Dim定义的局部变量只有在它所在的过程运行时才会有值。

<2>StaticyAssingle:

Static(静态)定义的局部变量在整个程序运行期间均有值,所以它可以作为中间变量保存结果。

2、模块范围(Private):

定义在模块的所有过程外部的起始位置,运行时在模块所包含的所有子过程和函数中可见。

从Private英文意思,“私有”就知道,它指明其后的变量或过程是当前模块私有的,只有自己可以使用,其它模块是不能使用的。

3、全局范围(Public共有的):

定义在模块的所有过程外部的起始位置,运行时在所有类模块和标准模块的所包含的所有子过程和函数过程中都见。

函数没指定关键字时,默认为Public。

变量的作用域和生命周期举例

注意:

1、全局变量在整个代码中都可以使用,都是可见的。

2、静态变量能够记忆其执行的结果,每次执行都是在上次结果的之上进行的。

(8)VBA中的运算符

程序利用各种运行符将我们前面学习的常量、变量连接起来,形成各种表达式。

如算术表达式、比较表达式、逻辑表达式等等,从而实现程序对数据的加工,对逻辑的判断。

所以,各种运算符非常重要,常常是VBA部分笔试的考点。

1、算术运算符(下表中假设ia=3)

运算符

优先级

示例例

计算结果

^

1

ia^2

9

-

2

-ia

-3

*

3

ia*ia*ia

27

/

3

10/ia

3.333333333

\

4

10\ia

3

Mod

5

10modia

1

+

6

10+ia

13

-

7

ia-10

-7

要点说明:

1、注意除“/”号与取整“\”号两者的区别,常容易混淆。

2、mod为取余数

3、注意各算术运行符的优先级(即计算次序,级别越高越先计算)

例如:

计算5+10mod10\9/3+2^2结果是?

10

2、字符串连接运算符

<1>+(连接运算):

要求两个连接的数均应为字符串类型

<2>&(连接运算):

两个连接的数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为字符型,然后进行连接操作。

例如:

"100"+"123"'两个字符串用+连接,正确,结果为“100123”

"Abc"+123'1个字符串用+连接一个数字,错误

"100"&123'1个字符串用&连接一个数字,正确,结果为“100123”

100&123'两个数字用&连接,正确,结果为“100123”

"Abc"&123'1个字符串用&连接一个数字,正确,结果为“Abc123”

3、逻辑运算符

<1>and(与):

tureandtrue=true、falseandtrue=false、falseandfalse=false

<2>or(或):

tureortrue=true、falseortrue=true、falseorfalse=false

<3>not(非):

nottrue=false、notfalse=ture

逻辑运行符的优先顺序是:

先算not,再算and,最后算or。

4、关系运算符

关系运算符,其比较两端表达式的关系,其结果为真(True)或假(False)

5、运算符的执行顺序

表达式中的多种不同类型的运算符的优先级如下:

算术运算符>=字符运算符>关系运算符>逻辑运算

说明:

当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2