第8章 模块与VBA编程基础.docx

上传人:b****6 文档编号:8430933 上传时间:2023-01-31 格式:DOCX 页数:21 大小:85.08KB
下载 相关 举报
第8章 模块与VBA编程基础.docx_第1页
第1页 / 共21页
第8章 模块与VBA编程基础.docx_第2页
第2页 / 共21页
第8章 模块与VBA编程基础.docx_第3页
第3页 / 共21页
第8章 模块与VBA编程基础.docx_第4页
第4页 / 共21页
第8章 模块与VBA编程基础.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

第8章 模块与VBA编程基础.docx

《第8章 模块与VBA编程基础.docx》由会员分享,可在线阅读,更多相关《第8章 模块与VBA编程基础.docx(21页珍藏版)》请在冰豆网上搜索。

第8章 模块与VBA编程基础.docx

第8章模块与VBA编程基础

第8章模块与VBA编程基础

一、模块的基本概念

模块是将VBA声明和过程作为一个单元进行保存的集合。

1、类模块

窗体和报表都是类模块,它们从属于各自的窗体或报表。

通过单击窗体或报表设计视图中工具栏上的“代码”命令,可进行类模块的编辑窗口。

2、标准模块

包含通用过程和常用过程,以.bas扩展名保存文件,缺省时应用程序中不包含标准模块,模块中对象的声明在缺省时是公有的。

3、将宏转换为模块

在Access系统中,可以将设计好的宏对象转换为模块代码形式。

其操作方法是:

右击指定宏,选择快捷菜单中“另存为”命令,将其另存为模块类型即可。

二、创建模块

过程是模块的单元组成,过程分为两种:

Sub子过程和Function函数过程。

1、在模块中加入过程

(1)子过程

⏹定义格式

Sub过程名([参数表])

[程序代码]

EndSub

⏹说明

Ø可在过程中放置ExitSub语句,强行退出过程

Ø过程的定义是平行,不能嵌套定义过程。

Ø过程结束标志为EndSub

⏹调用Sub过程

格式1:

Call过程名[(实参表)]

当过程没带参数时,缺省实参表。

否则带相应个数的实参,并参数间用逗号分隔。

格式2:

过程名[实参表]

当带参数时,则实参表不能用括号。

(2)函数过程

⏹定义格式

Function函数名([参数列表])[As类型]

程序代码

函数名=返回值

EndFunction

⏹说明

Ø以Function开头,并以EndFunction结束。

Ø函数中可用ExitFunction语句强行退出。

Ø类型选项表示该函数需要返回的数据类型,缺省时为Variant型。

⏹调用函数

与VB内部函数的调用相同,不能用Call调用。

2、在模块中执行宏

在模块中使用以下方式调用宏:

Docmd.RunMacro“宏名”[,Rcount][,Rexp]

Rcount用于计算宏运行次数,Rexp条件表达式,当结果为False时停止运行宏。

三、VBA程序设计基础

1、面向对象程序设计的基本概念

(1)对象是类的一个实例,每个对象都有自己的特征和行为。

(2)对象的属性:

指对象的特征,用数据来表示。

(3)对象的方法:

指对象的行为,用对象中的代码来实现。

(4)事件:

指对象可以识别和相应预定义的动作。

(5)类:

描述对象的特征以及对象外观和行为的模板。

其特征主要包括:

封装性、继承性、多态性、抽象性。

2、VisualBasic编辑环境

(1)启动VB编辑器方法

方法1:

通过各对象属性对话框中事件标签方式启动。

方法2:

通过模块对象列表中的“新建”按钮启动。

方法3:

通过主菜单“工具\宏\VisualBasic编辑器”命令或Alt+F11快捷键启动。

(2)VBA编辑器界面

⏹标准工具栏:

认识常用的命令按钮。

⏹工程窗口:

即资源管理器窗口,管理应用程序的所有模块文件。

⏹代码窗口:

有对象和事件下拉列表框、代码编辑区以及模块查看切换按钮组。

⏹属性窗口:

用于罗列指定对象的所有属性。

⏹立即窗口:

用于表达式计算和对象值的显示,主要用在程序调试时。

(3)程序语句书写规则

⏹多条语句写在同一行上时,语句间用冒号作分隔符

⏹将一条语句写在多行上时,此时可用续行符“_”。

⏹添加注释:

用单引号“‘”或Rem语句作为注释内容的开始。

3、数据类型与数据库对象

(1)标准数据类型

数据类型

类型标识

类型说明符

取值范围

整型

Integer

%

-32768~32767

长整型

Long

&

单精度

Single

!

双精度

Double

#

货币

Currency

@

字符串

String

$

0~65500

布尔型

Boolean

True或False

日期型

Date

100/1/1~9999/12/31

变体型

Variant

⏹布尔型数据:

其取值为True或False,True值存储为-1,False值存储为0。

⏹日期型数据:

其常量表示时以#号为定界符,如#2001-1-1#

⏹变体型数据:

可以包含除定长字符串与用户自定义类型外的任何数据类型。

(2)用户自定义类型

定义格式:

Type[数据类型名]

成员名1as<数据类型>

成员名2as<数据类型>

EndType

如:

TypeStud‘定义数据类型

Noasintger

Nameasstring*8

Sexasstring*1

Scoreassinge

Endtype

Dimstasstud‘定义数据类型变量

WithSt

.no=1001

.name=”李四”

.sex=”男”

.Score=88.5

endwith

‘给变量的各个成员赋值

St.no=1001

St.name=”李四”

St.sex=”男”

St.score=88.5

 

4、变量与常量

(1)变量声明

格式:

Dim变量名[As<数据类型>]或Dim变量名[类型说明符]

如:

dimaasinteger,basdate,c!

d

dimLg&

(2)强制声明

在通用声明区加上语句:

OptionExplicit。

这将要求程序中所有变量都必须先声明后才能使用。

(3)变量的作用域

⏹局部级:

在过程级定义的变量,仅在声明它的过程中可见。

⏹模块/窗体级:

在模块或窗体级声明的变量,在声明它的模块或窗体中的所有过程中可见。

⏹全局级:

用Public关键字在模块或窗体级声明的变量,在所有项目的任何过程中都可。

⏹定义静态变量:

用Static语句取代Dim语句,静态变量在调用时仍保留其原先的值。

(4)数组

⏹定义:

指连续可索引的具有相同数据类型的元素所组成的集合。

⏹使用一维数组

Ø声明格式:

Dim数组名([下标下界to]下标上界)as数据类型

Ø说明:

◆数组元素缺省下标值为0,

◆数组元素个数为(下标上界-下标下界)+1

⏹使用二维数组

Ø声明格式:

Dim数组名(下标1,下标2)as数据类型

Ø说明:

◆下标格式同一维数组下标格式,

◆最多可声明60个维数,

◆数组元素个数为:

下标1元素个数*下标2元素个数。

(5)变量命名规则

必须以字母打头,在同一范围内必须唯一,长度不能超过255个字符,且中间不能包含句点或类型声明符。

(6)常量

⏹概念:

指在程序运行过程中固定不变的数据量。

⏹Access支持三类常量:

Ø符号常量:

用Const语句定义,在模块中使用。

Ø固有常量:

是Access或引用库的一部分。

Ø系统定义常量:

True、False、Yes、No、On、Off、Null等等。

⏹声明符号常量

Ø使用Const语句进行符号常量声明。

Ø符号常量声明位置:

可在过程中或在模块顶部声明符号常量。

Ø模块级中声明的符号常量缺省为私有常量。

Ø在Const语句前加上Public声明的常量为公共常量,而加上Private声明的常量为私有常量。

Ø声明符号常量时,可定义的数据类型有:

Boolean、Byte、Integer、Long、Currency、Single、Double、Date、String或Variant。

例:

PublicConstconageasinteger=20

ConstconBirthasDate=#2006-01-01#,conWageasCurrency=3500¤

5、常用标准函数

(1)算术函数

⏹绝对值函数:

Abs(<数值表达式>)

如:

Abs(-10)=10

⏹向下取整函数:

Int(<数值表达式>)

如:

Int(3.25)=3,Int(3.99)=3,Int(-2.14)=-3,Int(-2.98)=-3

⏹取整函数:

Fix(<数值表达式>)

如:

Fix(3.25)=3,Fix(3.99)=3,Fix(-2.14)=-2,Fix(-2.98)=-2

⏹四舍五入函数:

Round(<数值表达式>[,<小数位数>])

如:

Round(3.84,1)=3.8,Round(3.86,1)=3.9,Round(3.84)=5,Round(3.84,0)=5

⏹开平方函数:

Sqr(<数值表达式>)

如:

Sqr(9)=3

⏹产生随机数函数:

Rnd(<数值表达式>)

产生0~1之间的随机小数。

用Randomize语句初始化随机数生成器,可以产生不同的随机数。

如:

Int(100*Rnd)‘产生[0,99]的随机数

Int(101*Rnd)‘产生[0,100]的随机数

Int(100*Rnd+1)‘产生[1,100]的随机数

Int(100*Rnd+200)‘产生[200,299]的随机数

通式:

Int(a*Rnd+b)=>产生[b,a+b-1]的随机数

(2)字符串函数

⏹字符串检索函数

InStr([start,]string1,string2[,compare])

start

可选参数。

为数值表达式,设置每次搜索的起点。

如果省略,将从第一个字符的位置开始。

如果start包含Null,将发生错误。

如果指定了compare参数,则一定要有start参数。

string1

必要参数。

接受搜索的字符串表达式。

string2

必要参数。

被搜索的字符串表达式。

Compare

可选参数。

指定字符串比较。

如果compare是Null,将发生错误。

如果省略compare,OptionCompare的设置将决定比较的类型。

指定一个有效的LCID(LocaleID)以在比较中使用与区域有关的规则。

compare参数设置为:

常数

描述

vbUseCompareOption

-1

使用OptionCompare语句设置执行一个比较。

vbBinaryCompare

0

执行一个二进制比较。

vbTextCompare

1

执行一个按照原文的比较。

vbDatabaseCompare

2

仅适用于MicrosoftAccess,执行一个基于数据库中信息的比较。

DimStr,Ch,MyPos

Str="XXpXXpXXPXXP"'被搜索的字符串。

Ch="P"'要查找字符串"P"。

'从第四个字符开始,以文本比较的方式找起。

返回值为6(小写p)。

'小写p和大写P在文本比较下是一样的。

MyPos=Instr(4,Str,Ch,1)

'从第一个字符开使,以二进制比较的方式找起。

返回值为9(大写P)。

'小写p和大写P在二进制比较下是不一样的。

MyPos=Instr(1,Str,Ch,0)

'缺省的比对方式为二进制比较(最后一个参数可省略)。

MyPos=Instr(Str,Ch)'返回9。

MyPos=Instr(1,Str,"W")'返回0。

⏹字符串长度检测函数

Len(string|varname)

部分

说明

string

任何有效的字符串表达式。

如果string包含Null,会返回Null。

Varname

任何有效的变量名称。

如果varname包含Null,会返回Null。

如果varname是Variant,Len会视其为String并且总是返回其包含的字符数。

如:

dimstrasstring*10

imI

str=”123”

I=12

Printlen(“12345”)‘长度为5

Printlen(12)‘出错

Printlen(i)‘长度2

Printlen(“等级考试”)‘长度4

Printlen(str)‘长度10

⏹字符串截取函数

ØLeft(string,length)

 

string

必要参数。

字符串表达式其中最左边的那些字符将被返回。

如果string包含Null,将返回Null。

length

必要参数;为Variant(Long)。

数值表达式,指出将返回多少个字符。

如果为0,返回零长度字符串("")。

如果大于或等于string的字符数,则返回整个字符串。

DimAnyString,MyStr

AnyString="HelloWorld"'定义字符串。

MyStr=Left(AnyString,1)'返回"H"。

MyStr=Left(AnyString,7)'返回"HelloW"。

MyStr=Left(AnyString,20)'返回"HelloWorld"。

ØRight(string,length)

string

必要参数。

字符串表达式,从中最右边的字符将被返回。

如果string包含Null,将返回Null。

length

必要参数;为Variant(Long)。

为数值表达式,指出想返回多少字符。

如果为0,返回零长度字符串("")。

如果大于或等于string的字符数,则返回整个字符串。

DimAnyString,MyStr

AnyString="HelloWorld"'定义字符串。

MyStr=Right(AnyString,1)'返回"d"。

MyStr=Right(AnyString,6)'返回"World"。

MyStr=Right(AnyString,20)'返回"HelloWorld"。

ØMid(string,start[,length])

string

必要参数。

字符串表达式,从中返回字符。

如果string包含Null,将返回Null。

start

必要参数。

为Long。

string中被取出部分的字符位置。

如果start超过string的字符数,Mid返回零长度字符串("")。

length

可选参数;为Variant(Long)。

要返回的字符数。

如果省略或length超过文本的字符数(包括start处的字符),将返回字符串中从start到尾端的所有字符。

DimMyString,FirstWord,LastWord,MidWords

MyString="MidFunctionDemo"建立一个字符串。

FirstWord=Mid(MyString,1,3)'返回"Mid"。

LastWord=Mid(MyString,14,4)'返回"Demo"。

MidWords=Mid(MyString,5)'返回"FuncionDemo"。

⏹生成空格字符函数

ØSpace(number)

DimMyString

'返回10个空格的字符串。

MyString=Space(10)

'将10个空格插入两个字符串中间。

MyString="Hello"&Space(10)&"World"

⏹大小写转换函数

ØLCase(string)‘只有大写的字母会转成小写;所有小写字母和非字母字符保持不变。

DimUpperCase,LowerCase

Uppercase="HelloWorld1234"'要输送的字符串。

Lowercase=Lcase(UpperCase)'返回"helloworld1234"。

ØUCase(string)‘只有小写的字母会转成大写;原本大写或非字母之字符保持不变。

DimLowerCase,UpperCase

LowerCase="HelloWorld1234"'要输送的字符串。

UpperCase=UCase(LowerCase)'返回"HELLOWORLD1234"。

⏹删除空格函数

ØLTrim(string)

ØRTrim(string)

ØTrim(string

返回Variant(String),其中包含指定字符串的拷贝,没有前导空白(LTrim)、尾随空白(RTrim)或前导和尾随空白(Trim)。

(3)日期/日间函数

见P215

(4)类型转换函数

见P218

6、运算符和表达式

⏹算术运算符

⏹字符串运算符

Ø运算符:

&和+

例:

VB=“Visual”+“Basic”'连接为字符串“VisualBasic”

label1.Caption="第"&Str(N)&"条记录"

'Str为数值型转字符型函数。

若N为1,标签上显示“第1条记录”

Ø说明:

◆v使用+号,要求连接的两个表达式均为字符串型

◆v使用&号,连接的两个表达式可以为任何类型,但结果为字符串型,如:

“当前日期” /8/2002#

⏹关系运算符

Is:

判定两个Object类型的变量是否引用同一个对象

Like:

判定左边的字符串是否与右边的字符串匹配

⏹逻辑运算符

常用:

Not、And、Or

Not:

表达式数为True时,结果为False;反之亦然。

例如,Not(4>5),结果为True

And:

两个表达式均为True时,结果为True

例如,(4>5)And(8>7),结果为False

Or:

两个表达式均为False时,结果为False

例如,(4>5)Or(8>7),结果为True

⏹表达式和优先级

Ø表达式:

用运算符和圆括号将常量、变量、函数和常数连接起来组成的有意义的式子。

如,数值表达式Cos(180*Pi/180)*100

逻辑表达式(N>=0)And(NMod2<>0)

Ø运算优先顺序(从高到低):

函数→算术运算(乘方→取负→乘/除→整除→求余→加/减)

→字符串运算符→关系运算符→逻辑运算符(Not→And→Or)

Ø用括号可以改变运算顺序

Ø乘方和负号相邻时,取负优先。

例如:

2^-2的结果是0.25,相当于2^(-2)

四、VBA流程控制语句

控制语句分3种:

顺序结构、选择结构和循环结构。

1、赋值语句

格式:

变量名=值或表达式

2、条件语句

(1)行If语句

⏹格式:

If<条件>Then<语句组1>[else<语句组2>]

⏹说明:

Ø条件:

可以是关系、逻辑表达式,也可以是算术,算术表达式以零值为False,非零值为True。

Ø该语句只能在同一行上书写,对语句组中的语句间用冒号分隔。

Ø该语句自身还可嵌套使用。

⏹例:

If100thenprint“true”elseprint“false”

Ifx>ythenx=x*y:

printxelsey=y/x:

printy

Ifx>0theny=1elseifx=0theny=0elsey=-1

(2)块If语句

⏹格式:

If <条件>Then

<语句组1>

[Else

<语句组2>]

EndIf

⏹说明:

Øif-then、else和endif都必须单独成行。

Ø块If语句也可以进行嵌套使用。

⏹例:

If Pass="1234"Then

Ok=True

Else

Ok=False

EndIf

⏹示例

见222例8.4、例8.5、例8.6、例8.7

(3)SelectCase语句

⏹格式:

SelectCase测试表达式

Case表达式列表1

  [语句块1]

[Case表达式列表2

  [语句块2]

  ...

[CaseElse

[语句块n]

EndSelect

⏹说明

Ø当测试表达式一旦找到满足的表达式列表,就执行其后的语句,之后退出多分支选择结构,即多分支结构只能执行其中的一个分支。

Ø表达式列表有四种表示格式:

◆列举式:

如case2,4,6,8

◆闭区间式:

如case1to10

◆关系式:

Is<关系运算表达式>如caseis>1

◆以上三种的混合式。

Ø一般case后的表达式不能出现相同的情况。

Øcase子句的先后顺序不影响程序的运行结果。

Øcaseelse子句必须放在所有case子句之后。

⏹示例

见225例8.8、例8.9

(4)条件函数

⏹IIf函数

Ø格式:

IIf(条件表达式,表达式1,表达式2)

Ø说明:

当条件表达式值为真(true)时,函数返回表达式1的值,否则返回表达式2的值。

Ø例

要求性别字段值为1时,文本框TxtSex中显示“男”,性别字段值为2时,文本框TxtSex中显示“女”。

TxtSex=IIf(性别=1,“男”,“女”)

⏹Switch函数

Ø格式:

Switch(条件1,表达式1[,条件2,表达式2…..[,条件n,表达式n]])

Ø说明:

Switch函数的参数列表由多对表达式和数值组成。

表达式是由左至右加以计算的,而数值则会在第一个相关的表达式为True时返回。

Ø例:

Matchup=Switch(CityName="北京","中国",CityName="伦敦","英国",_

CityName="罗马","意大利",CityName="巴黎","法国")

⏹Choose函数

Ø格式:

Choose(index,choice-1[,choice-2,...[,choice-n]])

Ø说明:

◆Choose会根据index的值来返回选择项列表中的某个值。

如果index是1,则Choose会返回列表中的第1个选择项。

如果index是2,则会返回列表中的第2个选择项,以此类推。

◆当index小于1或大于列出的选择项数目时,Choose函数返回Null。

◆如果index不是整数,则会先四舍五入为与其最接近的整数。

Ø例:

Matchup=Choose(idx,"北京","伦敦","罗马","巴黎")

⏹示例

见226例8.10、例8.11

3、循环语句

(1)For–Next语句

⏹格式:

For循环变量=初值to终值[Step步长]

语句块

[ExitFor]

语句块

Next循环变量

⏹说明:

>0初值<终值=1时,可省略

Ø步长<0初值>终值

=0死循环

Ø缺省S

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1