分享

学习VBA for Access

 zjsxShenwx 2008-09-16

第一课 常用的几个基本概念

VBA,先要了解几个基本概念,这些概念一开始看一定会有点晦涩难懂,不过看不明白也没关系,在后面慢慢你会了解它们的含义。先大概了解一下它们的定义。

1、变量(Variable

    命名的存储位置,包含在程序执行阶段修改的数据。每一变量都有变量名,在其范围内可唯一识别。可以指定变量的数据类型,也可不指定。

变量名必须以字母或字符开头,在同一范围内必须是唯一的。比如你在一个过程中定义了一个变量名为strMsg,在这个过程中就不能定义第二个名为strMsg的变量。变量名不能超过255个字符,而且中间不能包含句点或类型声明字符。

用一句话概括:变量就是在程序运行中的一个可改变的值。

2、常量(Constant)

     执行程序时保持常量值的命名项目。常量可以是字符串、数值、另一常量、任何(除乘幂与Is运算之外的)算术运算符或逻辑运算符的组合。可在代码中的任何地方使用常量代替实际的值。

用一句话概括:常量就是在程序运行中的一个不可改变的值

3、声明(Declare

     不可执行的代码。它命名常量、变量或过程,并且指定其特性,如数据类型。对于DLL procedures,声明指定名称、库和参数。比如你要在程序中使用变量或常量,就要先声明它。如:

dim strMsg as string ‘声明一个名为strMsg的局部字符串变量。

不同的声明语句表示所声明对象的作用域:

名称          作用域               声明位置            使用语句

局部           过程                 过程中               DimStatic

模块级        窗体及模块        模块的声明部份   Dim

全局           整个应用程序     模块的声明部份   Public Global

4、过程(Procedure

命名的语句序列,可作为单元来执行。

例如,一个按钮的单击事件是一个过程,一个函数也是一个过程。

5、模块(Module

一组声明集合,其后为过程。

6、数据类型

数据类型体现了数据的结构的特点。VBA提供的基本数据类型主要有字符串型数据和数值型数据。此外还提供了货币、对象、变体等数据类型。

上面这些只是一些常用的概念,如果想了解更多,也可以找一些VBAVB的书来看看。

第二课 加法运算

在编程当中,文本框及按钮是用得比较多的一个控件,我们先来学学如何使用这两个控件。

1、新建一个窗体

2、在窗体上放置三个文本框控件,分别命名为:txtNum1 txtNum2txtNum3,我们在命名时,尽量规范一点,可参考这里:http://www./cdb/viewthread.php?tid=554

3、在窗体上放置一个按钮,命名为cmdCount

开始编程:我们来作一个加法运算。

在按钮”cmdCount”的单击事件里输入以下语句:

txtNum3 = txtNum1 + txtNum2

在这里我们再来简单了解一下什么叫对象及事件:

1、对象:

     对象是具有特殊属性(数据)和行为方式(方法)的实体,建立一个对象后,其操作通过与该对象有关的属性、事件和方法来描述。在这里按钮”cmdCount”是一个对象,那三个文本框也分别是三个对象。

2、事件:

     是由VBA预先设置好的,能够被对象识别的动作。例如按钮就有:Click(单击)DblClick(双击)等事件。我们上面的那条语句就来响应该按钮的单击事件,每当该按钮被单击时,就会运行一遍我们的程序。

上面这条语句输完后,程序里的全部语句是这样的:

Option Compare Database

Private Sub cmdCount_Click()

    txtNum3 = txtNum1 + txtNum2  ‘只需输入这句,其它的都是系统自动生成的

End Sub

      我们现在运行这个窗体,在txtNum1里输入111,在txtNum2里输入222,然后按下按钮,在txtNum3内将会出现这个结果:111222,而不是我们想要的333。如何改进一下我们的语句,让程序能正确计算出我们想要的结果,请朋友们自已想想办法,下节课再讲。

第四课 计算器代码的编写

上节课我们已经对程序大概框架做了分析,这节课我们就来开始编写程序代码。由于计算器主要是对各位按钮做出反应,所以我们的代码也大多都是在按钮的单击事件中发生,上节课我们把按钮做了一个分类,共为5类:清零按钮、等号按钮、数字按钮、计算符号按钮、小数点按钮。小数点按钮及等号按钮相对比较复杂一点,我们从易到难,先做简单的,再做复杂的。

首先声明几个变量:

Option Compare Database     ‘这句是程序原本就有的,在这句下面输入下面两句

Dim dblNum1 As Double      ‘定义变量来保存第一个参加运算的数值

Dim strOperator As String      ‘定义变量来保存运算符号

1、清零按钮

只有一句程序,作用是把窗体上的文本框清零。

Private Sub cmdClear_Click()

    txtResult = 0

End Sub

按下这个按钮之后,文本框里的值为0

2、数字按钮

这一类的按钮共有10个,当按下这类按钮就把代表这个按钮的数字加在文本框现有数字的后面。

Private Sub cmd0_Click()

    txtResult = txtResult & 0

End Sub

这是cmd0按钮的事件,其它数字按钮的事件也类似,只需把最后面的0改为相应数字就行了。

3、运算符号按钮

当按下运算符号按钮时,做三件事:

a)把文本框里的数值保存到变量dblNum1

dblNum1 = Val(txtResult)

b)把代表该按钮的运算符号保存到变量strOperator

strOperator = "+"  ‘这是按下”+”号按钮的语句,其它运算按钮要换成对应的符号

c)把文本框清零,相当于按下清零按钮

txtResult = 0

4、等号按钮

当按下等号按钮时,程序必须判断你想运行什么运算,判断的根据就是保存在变量strOperator中的运算符,运算还要有运算对象,对象的来源一是保存在变量dblnum1中的数值,一是文本框中的数值。判断语句有许多种,比如if语句以及 select case语句,我们在这里采用的是select case语句,if语句在小数点按钮里会用到。

Select 语句的语法:

Select Case testexpression

[Case expressionlist-n

[statements-n]] ...

[Case Else

[elsestatements]]

End Select

语法说明:

testexpression 必要参数。任何数值表达式或字符串表达式。

expressionlist-n 如果有 Case 出现,则为必要参数。其形式为 expressionexpression To expressionIs comparisonoperator expression的一个或多个组成的分界列表。To 关键字可用来指定一个数值范围。如果使用 To 关键字,则较小的数值要出现在 To 之前。使用 Is 关键字时,则可以配合比较运算符(除 Is Like 之外)来指定一个数值范围。如果没有提供,则 Is 关键字会被自动插入。

statements-n 可选参数。一条或多条语句,当 testexpression 匹配expressionlist-n中的任何部分时执行。

elsestatements 可选参数。一条或多条语句,当 testexpression 不匹配 Case 子句的任何部分时执行。

更详细的说明请查阅Access帮助

语法已经知道了,那下面就来开始用select case来编写等号按钮事件中的程序:

Private Sub cmdEqual_Click()  

strOperator来做为选择条件

Select Case strOperator

    ‘strOperator=”+”      

    Case "+"            

文本框的值等于变量dblnum1的值加文本框的值。这里我们使用了VAL函数,因为文本框中的值是一个字符串,而变量中的值是双精度数值型,所以先要用val函数把文本框中的值转换为数值型。

txtResult = dblNum1 + Val(txtResult)

下面的不做解释了,因为都是一样的语句                         

        Case "-"

            txtResult = dblNum1 - Val(txtResult)

        Case "*"

            txtResult = dblNum1 * Val(txtResult)

        Case "/"

            txtResult = dblNum1 / Val(txtResult)

    End Select

End Sub

还有一个小数点按钮的程序没做,由于时间关系,下节课再说,今天已花了太多时间在这了,再不去工作老板要炒我鱿鱼了:)

第五课 小数点按钮及分支语句

这节课我们继续来写小数点按钮的代码写完。(程序中的0113是行号,为了解释方便而加上去的,在程序里不要加上该行号)。

Private Sub cmdPoin_Click()

01    Dim i  As Integer

02    Dim j  As String

03    Dim PoinTag As Boolean

04    For i = 1 To Len(txtResult)

05        j = Mid(txtResult, i, 1)

06        If j = "." Then

07            PoinTag = True

08            Exit For

09        End If

10    Next i

11    If PoinTag = False Then

12        txtResult = txtResult & "."

13    End If

End Sub

01-----03定义变量,01定义一个整型变量用来保存循环的次数,02定义一个字符串变量用来保存文本框中的字符,03定义一个布尔变量,用来保存小数点的存在状态,PoinTag=true表示已有小数点,PoinTag=false表示没有小数点。

04-----10是一个for循环,循环体里面嵌套着一个IF判断语句。

04I=1到文本框txtResult的总字符数为止,步长为1

05 j=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语句及循环语句,循环语句下节课再讲。上节课我们用了一个select case 语句,IFSelect case语句都是判断语句,或称为分支语句。由于在我们以后的编程中会较多地使用判断语句,尤其是上面提到的两种判断语句,所以在这里我想再着重地讲一讲这两个判断语句的语法及用法。

     Select case 的语法我们上节课已讲过了,看一下if语句:

If语句有以下几种形式:

1if 条件 then

          语句序列

    end if

解释:如果满足条件,就执行语句序列里的所有语句,语句序列就是一条或一条以上的语句,当然,也可以为空,就是没有语句。

例子:

        if 李寻欢.性别=”” then

                      msgbox “他是青蛙!

        end if

2if 条件 then

         语句序列1

     else

         语句序列2

      end if

        解释:如果满足条件,就执行语句序列1,否则就执行语句序列2

例子:

        if 李寻欢.性别=”” then

        msgbox “他是青蛙!

        else

        msgbox “他是恐龙!

        end if

3   if 条件1 then

                语句序列1

         elseif 条件2  then

        语句序列2

        elseif 条件3  then

        语句序列3

        elseif  条件n  then

        语句序列n

        end if

        解释:如果满足条件1就执行语句序列1,否则如果满足条件2就执行语句序列2,否则如果满足条件3就执行语句序列3,否则如果满足条件n,就执行语句序列n

例子:

        if 李寻欢.性别=”” then

               msgbox “他是青蛙!

        elseif 李寻欢.性别=””  then

               msgbox “他是恐龙!

        elseif 李寻欢.性别=”不男不女”  then

                msgbox “他是怪物!

             msgbox “大家快跑呀!

             msgbox “哎呀!我的鞋掉了!

             msgbox “鞋掉了有什么了不起,我的裤子都掉了!

        end if

上面的所有例子中,李寻欢是一个对象,性别是该对象的属性,引用一个对象的属性就用这种形式:李寻欢.性别,具体的对象及属性我们以后再说。Msgbox是一个事件处理函数,它的作用是在对话框中显示消息,等待用户单击按钮,并返回一个整数来表示单击的是哪一个按钮。在上面跟在msgbox 函数后面的双引号中的文字,将会显示在对话框中。

    既然if语句及select case语句都是判断语句,那到底什么时候该用if语句,什么时候该用select case语句呢?我个人是这样理解的:要判断三个以下条件的,我用If语句,三个条件以上的我用select语句,因为用select case语句显得更为直观一点,使程序更易看懂。上一节课的select  case语句如果用if语句来写,应该如何写?请大家自已写一下

第六课 小数点代码分析及For循环语句

这节课我们来分析一下小数点按钮的代码,这段代码用到了for循环及if语句,if语句上节课已讲过了,这节课着重讲一下for循环语句。

for循环有两种形式:

1For Each.…Next   针对一个数组或集合中的每个元素,重复执行一组语句。

        这种循环以后再讲

2For…Next   以指定次数来重复执行一组语句。

语法:

        ()                 (到)           (每次+)

        for 变量=初始值 To 结束值 [Setp 步长]

                语句1

                语句2

                语句N

        Next 变量

    当每次变量加1的情况下,中括号里的“Setp 步长可以不写,如果变量每次加的不是1,是其它数字,这句不可省略。

    当程序运行到“Next 变量时,就会做一个加法运算:变量=变量+步长,比如变量原来等于1,步长设为2,当运行到这句时,变量就变成:1+2=3了,然后程序又返回第一句:for 变量=初始值 To 结束值 [Setp 步长],到了这里程序会自动用变量的值跟结束值比较一下,如果变量小于或等于结束值,程序就再执行一次循环体里的语句,如果大于结束值,就直接跳过循环,执行“Next 变量之后的语句了。当然,不是一定要执行到变量大于结束值才可以跳出循环,可以在循环体内设置一个条件,当满足这个条件就用“Exit For”来跳出循环,我们的小数点按钮就用了这种方法。下面我们来分析小数点的代码。

程序思路:

    要确定文本框中的字符是否包含小数点,必须一个字符一个字符地跟“.”比较,如果该字符等于“.”,就说明文本框中的字符包含小数点,这时就可以跳出循环了,因为我们的目的已达到。当然,你可以不跳出循环,让它比较完所有字符,程序也不会出错,只是程序运行时间增加了,程序的效率降低了。如果找到小数点,要把这个信息用一个变量来保存起来,因为我们要根据找到或没找到小数点来决定小数点按钮按下去后,文本框里的字符后面是否加小数点。如果找到小数点,就不能再加小数点了,如果没找到,就在后面加一个小数点。因为是否找到小数点只有两种状态:找到或没找到,所以就把保存是否找到小数点的信息的变量定义为布尔型数据,这种数据只有两种值True/False,用中文表示就是:是/否。你也可以定义成字符型或数字型,然后用不同的值来表示是否找到,只要你知道是什么意思就可以了,不过如果只存在两种状态的话,最好用布尔型。

    程序思路的第一句话我提到了要一个字符一个字符地跟“.”比较,但文本框里的字符是一串,如何把它们分解成一个一个呢?用Mid函数!Mid函数的语法:

     变量=Mid(字符串,从第几个字符开始截取,要截取几个字符)

如:i=Mid(“Hello!”, 5, 1)表示从第5个字符开始截取,要截取1个字符。运行这句程序之后,I就等于o了。程序分析得差不多了,下面注释一下各语句:

Private Sub cmdPoin_Click()

    Dim i As Integer        ‘定义变量i,让它做为循环变量

    Dim j As String        ‘定义变量j,让它保存mid函数截取下来的字符

    Dim PoinTag As Boolean        ‘定义变量PoinTag,让它保存是否找到小数点标志

    For i = 1 To Len(txtResult)  ‘1循环到字符长度,注:Len函数返回字符长度

        j = Mid(txtResult, i, 1)  ‘截取第i个字符赋值给j

        If j = "." Then                        ‘如果j等于小数点

            PoinTag = True        ‘把找到小数点的信息保存到顶变量pointag

            Exit For                        ‘跳出循环体,不再循环

        End If                                ‘if语句结束

    Next i                                        ‘下一个i

    If PoinTag = False Then    ‘如果变量PoinTag的值等于false,那么

        txtResult = txtResult & "."  ‘把小数点加到文本框中的字符后面

    End If

End Sub

第七课 使鼠标指向按钮时变成手形

你如果下载了我前面的计算器程序,使用的时候一定会发现当鼠标指向按钮时就会变成手形,知道为什么会有这种效果吗?其实这是借用了超级链接的特性,上网时大家都知道,如果鼠标指向一个超级链接,一般都会变成手形。按钮中也有一个"超级链接地址"的属性,如果我们在这个属性里填入任意一个字符,这个按钮也就成了超级链接,当然也就拥有超级链接的特征了。

上一课我们曾经提过For Each.…Next语句,针对一个数组或集合中的每个元素,重复执行一组语句。集合就是包含一组相关对象的对象。一个人是一个对象,一群人就是一个集合了(也称为集团或团伙:)。一个按钮是一个对象,许多个按钮在一起就是一个集合(这就不能称为团伙了)。二个按钮是一个集合,三个也是一个集合,我们如何确定一个集合呢?按钮都放在窗体上,所以这个集合肯定也是在窗体上,每个窗体都有一个Controls 集合,这是控件集合,按钮是控件中的一种,所以按钮是这个集合中的一员。

For Each.…Next  

用途:针对一个数组或集合中的每个元素,重复执行一组语句。

语法:

      For Each 集合成员 IN  集合

       语句1

           语句2

           语句N

         Next 集合成员

基本概念都知道了,下面开始编写代码,要在程序一打开就使按钮变成超级链接,就得在窗体的加载事件中写代码:

Private Sub Form_Load()

    Dim ctlButt As Control         ‘定义一个变量ctlButt,它的类型为控件

    DoCmd.Restore                  ‘恢复窗体大小,这只是控制窗体的外形,跟手形效果无关

    For Each ctlButt In Me.Controls        ‘开始循环

        If TypeOf ctlButt Is CommandButton Then    ‘如果变量ctlButt的类型是命令按钮

            ctlButt.HyperlinkAddress = " "      ‘变量ctlButt的超级链接地址等于一个空格,你可以填入别的内容

        End If        ‘结束if语句

    Next ctlButt   ‘下一个控件

End Sub            ‘结束过程

1TypeOf表示类型,CommandButton表示命令按钮

2ctlButt.HyperlinkAddress = " "     这里的双引号中有一个空格,如果没空格就是""

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多