一起来学VBA for Access.docx
《一起来学VBA for Access.docx》由会员分享,可在线阅读,更多相关《一起来学VBA for Access.docx(10页珍藏版)》请在冰豆网上搜索。
一起来学VBAforAccess
第一课 常用的几个基本概念
1、变量(Variable)
命名的存储位置,包含在程序执行阶段修改的数据。
每一变量都有变量名,在其范围内可唯一识别。
可以指定变量的数据类型,也可不指定。
变量名必须以字母或字符开头,在同一范围内必须是唯一的。
比如你在一个过程中定义了一个变量名为strMsg,在这个过程中就不能定义第二个名为strMsg的变量。
变量名不能超过255个字符,而且中间不能包含句点或类型声明字符。
用一句话概括:
变量就是在程序运行中的一个可改变的值。
2、常量(Constant)
执行程序时保持常量值的命名项目。
常量可以是字符串、数值、另一常量、任何(除乘幂与Is运算之外的)算术运算符或逻辑运算符的组合。
可在代码中的任何地方使用常量代替实际的值。
用一句话概括:
常量就是在程序运行中的一个不可改变的值
3、声明(Declare)
不可执行的代码。
它命名常量、变量或过程,并且指定其特性,如数据类型。
对于DLLprocedures,声明指定名称、库和参数。
比如你要在程序中使用变量或常量,就要先声明它。
如:
dimstrMsgasstring‘声明一个名为strMsg的局部字符串变量。
不同的声明语句表示所声明对象的作用域:
名称 作用域 声明位置 使用语句
局部 过程 过程中 Dim或Static
模块级 窗体及模块 模块的声明部份 Dim
全局 整个应用程序 模块的声明部份 Public或Global
4、过程(Procedure)
命名的语句序列,可作为单元来执行。
例如,一个按钮的单击事件是一个过程,一个函数也是一个过程。
5、模块(Module)
一组声明集合,其后为过程。
6、数据类型
数据类型体现了数据的结构的特点。
VBA提供的基本数据类型主要有字符串型数据和数值型数据。
此外还提供了货币、对象、变体等数据类型。
第二课 加法运算
在编程当中,文本框及按钮是用得比较多的一个控件,我们先来学学如何使用这两个控件。
1、新建一个窗体
2、在窗体上放置三个文本框控件,分别命名为:
txtNum1、txtNum2、txtNum3,我们在命名时,尽量规范一点.
3、在窗体上放置一个按钮,命名为cmdCount
开始编程:
我们来作一个加法运算。
在按钮”cmdCount”的单击事件里输入以下语句:
txtNum3=txtNum1+txtNum2
在这里我们再来简单了解一下什么叫对象及事件:
1、对象:
对象是具有特殊属性(数据)和行为方式(方法)的实体,建立一个对象后,其操作通过与该对象有关的属性、事件和方法来描述。
在这里按钮”cmdCount”是一个对象,那三个文本框也分别是三个对象。
2、事件:
是由VBA预先设置好的,能够被对象识别的动作。
例如按钮就有:
Click(单击)、DblClick(双击)等事件。
我们上面的那条语句就来响应该按钮的单击事件,每当该按钮被单击时,就会运行一遍我们的程序。
上面这条语句输完后,程序里的全部语句是这样的:
OptionCompareDatabase
PrivateSubcmdCount_Click()
txtNum3=txtNum1+txtNum2 '只需输入这句,其它的都是系统自动生成的
EndSub
我们现在运行这个窗体,在txtNum1里输入111,在txtNum2里输入222,然后按下按钮,在txtNum3内将会出现这个结果:
111222,而不是我们想要的333。
第三课 设计一个简单的计算器
上节课我们编写的程序不能正确得出结果,原因是:
在字符运算中,“+”号是连字符,跟“&”号一样,作用是把符号前后的字符连起来,而我们引用文本框里的值默认类型是字符型,电脑以为我们要进行字符运算,因此计算结果就是“111222”,所以如果想要得到正确的结果,就要先把文本框的值用VAL函数转换成数值型数据。
所以上面的语句改成这样就可以了:
txtNum3=val(txtNum1)+val(txtNum2)
这节课我们来做一个简单的计算器。
这个计算器的知识要点:
1.字符型与数值型数据的转换
2.IF语句
3.SelectCase
4.For循环
下面我们开始设计程序。
步骤1 建立窗体
在窗体上放置20个按钮,一个文本框
步骤2 给各个控件输入名称及标题
名称及标题如下:
1、数字按钮
控件1名称:
cmd1 控件1标题:
1 控件2名称:
cmd2 控件2标题:
2
控件3名称:
cmd3 控件3标题:
3 控件4名称:
cmd4 控件4标题:
4
控件5名称:
cmd5 控件5标题:
5 控件6名称:
cmd6 控件6标题:
6
控件7名称:
cmd7 控件7标题:
7 控件8名称:
cmd8 控件8标题:
8
控件9名称:
cmd9 控件9标题:
9 控件10名称:
cmd0控件10标题:
0
2、小数点按钮
控件11名称:
cmdPoin控件11标题:
.
3、计算按钮
控件12名称:
cmdadd控件12标题:
+ 控件13名称:
cmdMinus 控件13标题:
-
控件14名称:
cmdMult控件14标题:
* 控件15名称:
cmdDiv 控件15标题:
/
控件16名称:
cmdSqr控件16标题:
开方 控件17名称:
cmdSqu 控件17标题:
平方
控件18名称:
cmdReci控件18标题:
倒数
4、清零按钮
控件19名称:
cmdClear 控件19标题:
C
5、等号按钮
控件20名称:
cmdEqual控件18标题:
=
6、文本框
控件21名称:
txtResult
步骤3 程序分析
我们首先要确定各个按钮的作用:
1、数字按钮:
当按下数字按钮,文本框里应该出现我们所按下的按钮所代表的数字,如果文本框里原来有数字,就应该在原有数字的尾部加上新的数字。
2、小数点按钮
当按下小数点按钮,必须判断文本框中的数字是否含有小数点,如果没有,就把小数点加在文本框的现有数字后面。
3、计算按钮
当按下计算按钮,就把文本框里的数字保存到一个变量中,把代表该按钮的运算符保存在另一个变量中,并清空文本框,等待下一个参加运算的数字的输入。
4、清零按钮
当按下清零按钮,就把文本框的文本把文本框的值置为0
5、等号按钮
当按下等号按钮,就进行计算,用保存在变量里的数字及运算符跟文本框的里数字进行运算,结果显示在文本框中。
第四课 计算器代码的编写
上节课我们已经对程序大概框架做了分析,这节课我们就来开始编写程序代码。
由于计算器主要是对各位按钮做出反应,所以我们的代码也大多都是在按钮的单击事件中发生,上节课我们把按钮做了一个分类,共为5类:
清零按钮、等号按钮、数字按钮、计算符号按钮、小数点按钮。
小数点按钮及等号按钮相对比较复杂一点,我们从易到难,先做简单的,再做复杂的。
首先声明几个变量:
OptionCompareDatabase ‘这句是程序原本就有的,在这句下面输入下面两句
DimdblNum1AsDouble ‘定义变量来保存第一个参加运算的数值
DimstrOperatorAsString ‘定义变量来保存运算符号
1、清零按钮
只有一句程序,作用是把窗体上的文本框清零。
PrivateSubcmdClear_Click()
txtResult=0
EndSub
按下这个按钮之后,文本框里的值为0。
2、数字按钮
这一类的按钮共有10个,当按下这类按钮就把代表这个按钮的数字加在文本框现有数字的后面。
PrivateSubcmd0_Click()
txtResult=txtResult&0
EndSub
这是cmd0按钮的事件,其它数字按钮的事件也类似,只需把最后面的0改为相应数字就行了。
3、运算符号按钮
当按下运算符号按钮时,做三件事:
a)把文本框里的数值保存到变量dblNum1中
dblNum1=Val(txtResult)
b)把代表该按钮的运算符号保存到变量strOperator中
strOperator="+" ‘这是按下”+”号按钮的语句,其它运算按钮要换成对应的符号
c)把文本框清零,相当于按下清零按钮
txtResult=0
4、等号按钮
当按下等号按钮时,程序必须判断你想运行什么运算,判断的根据就是保存在变量strOperator中的运算符,运算还要有运算对象,对象的来源一是保存在变量dblnum1中的数值,一是文本框中的数值。
判断语句有许多种,比如if语句以及selectcase语句,我们在这里采用的是selectcase语句,if语句在小数点按钮里会用到。
Select语句的语法:
SelectCasetestexpression
[Caseexpressionlist-n
[statements-n]]...
[CaseElse
[elsestatements]]
EndSelect
语法说明:
testexpression必要参数。
任何数值表达式或字符串表达式。
expressionlist-n如果有Case出现,则为必要参数。
其形式为expression,expressionToexpression,Iscomparisonoperatorexpression的一个或多个组成的分界列表。
To关键字可用来指定一个数值范围。
如果使用To关键字,则较小的数值要出现在To之前。
使用Is关键字时,则可以配合比较运算符(除Is和Like之外)来指定一个数值范围。
如果没有提供,则Is关键字会被自动插入。
statements-n可选参数。
一条或多条语句,当testexpression匹配expressionlist-n中的任何部分时执行。
elsestatements可选参数。
一条或多条语句,当testexpression不匹配Case子句的任何部分时执行。
※更详细的说明请查阅Access帮助
语法已经知道了,那下面就来开始用selectcase来编写等号按钮事件中的程序:
PrivateSubcmdEqual_Click()
‘用strOperator来做为选择条件
SelectCasestrOperator
‘当strOperator=”+”
Case"+"
‘文本框的值等于变量dblnum1的值加文本框的值。
这里我们使用了VAL函数,因为文本框中的值是一个字符串,而变量中的值是双精度数值型,所以先要用val函数把文本框中的值转换为数值型。
txtResult=dblNum1+Val(txtResult)
‘下面的不做解释了,因为都是一样的语句
Case"-"
txtResult=dblNum1-Val(txtResult)
Case"*"
txtResult=dblNum1*Val(txtResult)
Case"/"
txtResult=dblNum1/Val(txtResult)
EndSelect
EndSub
第五课 小数点按钮及分支语句
这节课我们继续来写小数点按钮的代码写完。
(程序中的01至13是行号,为了解释方便而加上去的,在程序里不要加上该行号)。
PrivateSubcmdPoin_Click()
01 Dimi AsInteger
02 Dimj AsString
03 DimPoinTagAsBoolean
04 Fori=1ToLen(txtResult)
05 j=Mid(txtResult,i,1)
06 Ifj="."Then
07 PoinTag=True
08 ExitFor
09 EndIf
10 Nexti
11 IfPoinTag=FalseThen
12 txtResult=txtResult&"."
13 EndIf
EndSub
01-----03定义变量,01定义一个整型变量用来保存循环的次数,02定义一个字符串变量用来保存文本框中的字符,03定义一个布尔变量,用来保存小数点的存在状态,PoinTag=true表示已有小数点,PoinTag=false表示没有小数点。
04-----10是一个for循环,循环体里面嵌套着一个IF判断语句。
04从I=1到文本框txtResult的总字符数为止,步长为1。
05j=用Mid函数来截取的那一个字符,Mid函数的语法:
Mid(字符串或代表字符串的变量,从第几个字符开始,截取几个字符),Mid(txtResult,i,1)就可以解释为从第i个开始,截取文本框中的1个字符。
每次循环i都加1,所以每次截取的字符都不一样,从第1个字符开始,逐个截取文本框中的字符,直到最后一个。
06如果j=小数点,就
07让变量PoinTag=True
08退出循环
09结束If语句
10下一个i,也就是i=i+1,再返回04行重新开始循环
11如果变量PoinTag=false,那么
12文本框txtResult中的文本等于原有的文本尾部再加上小数点
13结束if语句
在这个按钮事件中我们用到了IF语句及循环语句,循环语句下节课再讲。
上节课我们用了一个selectcase语句,IF及Selectcase语句都是判断语句,或称为分支语句。
由于在我们以后的编程中会较多地使用判断语句,尤其是上面提到的两种判断语句,所以在这里我想再着重地讲一讲这两个判断语句的语法及用法。
Selectcase的语法我们上节课已讲过了,看一下if语句:
If语句有以下几种形式:
1、if条件then
语句序列
endif
解释:
如果满足条件,就执行语句序列里的所有语句,语句序列就是一条或一条以上的语句,当然,也可以为空,就是没有语句。
例子:
if李寻欢.性别=”男”then
msgbox“他是青蛙!
”
endif
2、if条件then
语句序列1
else
语句序列2
endif
解释:
如果满足条件,就执行语句序列1,否则就执行语句序列2。
例子:
if李寻欢.性别=”男”then
msgbox“他是青蛙!
”
else
msgbox“他是恐龙!
”
endif
3、 if条件1then
语句序列1
elseif条件2 then
语句序列2
elseif条件3 then
语句序列3
elseif 条件n then
语句序列n
endif
解释:
如果满足条件1就执行语句序列1,否则如果满足条件2就执行语句序列2,否则如果满足条件3就执行语句序列3,否则如果满足条件n,就执行语句序列n。
例子:
if李寻欢.性别=”男”then
msgbox“他是青蛙!
”
elseif李寻欢.性别=”女” then
msgbox“他是恐龙!
”
elseif李寻欢.性别=”不男不女” then
msgbox“他是怪物!
”
msgbox“大家快跑呀!
”
msgbox“哎呀!
我的鞋掉了!
”
msgbox“鞋掉了有什么了不起,我的裤子都掉了!
”
endif
上面的所有例子中,李寻欢是一个对象,性别是该对象的属性,引用一个对象的属性就用这种形式:
李寻欢.性别,具体的对象及属性我们以后再说。
Msgbox是一个事件处理函数,它的作用是在对话框中显示消息,等待用户单击按钮,并返回一个整数来表示单击的是哪一个按钮。
在上面跟在msgbox函数后面的双引号中的文字,将会显示在对话框中。
既然if语句及selectcase语句都是判断语句,那到底什么时候该用if语句,什么时候该用selectcase语句呢?
我个人是这样理解的:
要判断三个以下条件的,我用If语句,三个条件以上的我用select语句,因为用selectcase语句显得更为直观一点,使程序更易看懂。
上一节课的select case语句如果用if语句来写,应该如何写?
第六课 小数点代码分析及For循环语句
这节课我们来分析一下小数点按钮的代码,这段代码用到了for循环及if语句,if语句上节课已讲过了,这节课着重讲一下for循环语句。
for循环有两种形式:
1、ForEach.…Next 针对一个数组或集合中的每个元素,重复执行一组语句。
这种循环以后再讲
2、For…Next 以指定次数来重复执行一组语句。
语法:
(从) (到) (每次+)
for变量=初始值To结束值[Setp步长]
语句1
语句2
语句N
Next变量
当每次变量加1的情况下,中括号里的“Setp步长”可以不写,如果变量每次加的不是1,是其它数字,这句不可省略。
当程序运行到“Next变量”时,就会做一个加法运算:
变量=变量+步长,比如变量原来等于1,步长设为2,当运行到这句时,变量就变成:
1+2=3了,然后程序又返回第一句:
for变量=初始值To结束值[Setp步长],到了这里程序会自动用变量的值跟结束值比较一下,如果变量小于或等于结束值,程序就再执行一次循环体里的语句,如果大于结束值,就直接跳过循环,执行“Next变量”之后的语句了。
当然,不是一定要执行到变量大于结束值才可以跳出循环,可以在循环体内设置一个条件,当满足这个条件就用“ExitFor”来跳出循环,我们的小数点按钮就用了这种方法。
下面我们来分析小数点的代码。
程序思路:
要确定文本框中的字符是否包含小数点,必须一个字符一个字符地跟“.”比较,如果该字符等于“.”,就说明文本框中的字符包含小数点,这时就可以跳出循环了,因为我们的目的已达到。
当然,你可以不跳出循环,让它比较完所有字符,程序也不会出错,只是程序运行时间增加了,程序的效率降低了。
如果找到小数点,要把这个信息用一个变量来保存起来,因为我们要根据找到或没找到小数点来决定小数点按钮按下去后,文本框里的字符后面是否加小数点。
如果找到小数点,就不能再加小数点了,如果没找到,就在后面加一个小数点。
因为是否找到小数点只有两种状态:
找到或没找到,所以就把保存是否找到小数点的信息的变量定义为布尔型数据,这种数据只有两种值True/False,用中文表示就是:
是/否。
你也可以定义成字符型或数字型,然后用不同的值来表示是否找到,只要你知道是什么意思就可以了,不过如果只存在两种状态的话,最好用布尔型。
程序思路的第一句话我提到了要一个字符一个字符地跟“.”比较,但文本框里的字符是一串,如何把它们分解成一个一个呢?
用Mid函数!
Mid函数的语法:
变量=Mid(字符串,从第几个字符开始截取,要截取几个字符)
如:
i=Mid(“Hello!
”,5,1)表示从第5个字符开始截取,要截取1个字符。
运行这句程序之后,I就等于o了。
程序分析得差不多了,下面注释一下各语句:
PrivateSubcmdPoin_Click()
DimiAsInteger ‘定义变量i,让它做为循环变量
DimjAsString ‘定义变量j,让它保存mid函数截取下来的字符
DimPoinTagAsBoolean ‘定义变量PoinTag,让它保存是否找到小数点标志
Fori=1ToLen(txtResult) ‘从1循环到字符长度,注:
Len函数返回字符长度
j=Mid(txtResult,i,1) ‘截取第i个字符赋值给j
Ifj="."Then ‘如果j等于小数点
PoinTag=True ‘把找到小数点的信息保存到顶变量pointag中
ExitFor ‘跳出循环体,不再循环
E