VBA基础知识(三)-will.miao
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


VBA基础知识(三)

发表时间:2012/10/26 13:02:00 评论(2) 浏览(6153)  评论 | 加入收藏 | 复制
   
摘 要:2.2过程和模块
过程是VBA代码的容器。在VBA中有3种过程,分别是了过程、函数过程和属性过程。虽然在某些情况下,3者的功能会有所重合,但是每种过程都有其独特的、惟一的用途。而模块则是过程的容器。模块有两种基本类型:类模块和标准模块。模块中的每一个过程都可以是一个函数过程或一个子过程。
正 文:

1.子过程
子过程是一系列由Sub和End Sub语句所包含起来的VBA语句,它们会执行动作却不能返回一个值。使用子过程可以执行动作、计算数值以及更新并修改内置的属性设置。
Sub语句必须声明一个子过程名。对于事件除了过程有非常程式化的名称,过程命名通常要进循标准的变量命名约定,必须以字母开头,长度不能超过255个字符,不能包含空格和标点,不能是VBA的关键字、函数和操作符名称。子过程可有参数,例如常数、变量、或是表达式等来调用它。如果一个子过程没有参数,则它的子语句必须包含一个空的圆括号。
可以在VBA的代码窗口中直接输入代码编写子过程,例如下面的代码实现了两个简单的子过程。其中Int_Add 子过程求两个整数的和,并将其输出到立即窗口中,Demo子过程则调用Int_Add子过程求1和2的和。
Sub demo()
Call lnt_Add(l, 2) '调用lnt_Add子过程求1和2的和
End Sub
Sub int_add(a As Integer, b As Integer)
Dim Result As Integer
Result -a + b
Debug.Print Result
End Sub
将这段代码粘贴到一个新建的模块中,单击工具栏上的“运行”命令按钮,在弹出的如图所示的“宏”对话框中选择运行“Demo”子过程。
运行结果下图所示

在Access的窗体的“设计视图”中,使用工具栏的“控件向导”命令,在往窗体中添加控件的同时,会有向导提示自动生成30多个功能的VBA代码。可以在窗体的设计视图中,将工具栏上的“控件向导”命令按钮激活。例如,这时候选择按钮控件在窗体上绘制,然后会出现如下图所示的“命令按钮向导”对话框,可以在其中选择不同的操作,则会依据所选的操作生成相应的子过程。

这里选择了关闭窗口的操作,则生成了如下的关闭窗口的子过程代码。
Private Sub Close_Cmd_Click()
    On Error GoTo Err_Close_Cmd_Click
    DoCmd.Close
Exit_Close_Cmd_Click:
    Exit Sub
Err_Close_Cmd_Click:
    MsgBox Err.Description
    Resume Exit_Close_Cmd_Click
End Sub
2.函数过程
函数过程是一系列由Function和End Function语句所包含起来的VBA语句。函数过程和子过程有两点不同,首先,函数可以返回一个值,所以在表达式中可以将其当作变量一样使用;其次,函数不能作为事件处理过程。其他方面二者很类似,例如,Function过程可经由调用者过程传递参数,常数、变量或是表达式等都可用来调用它。函数要在过程的—个或多个语句中指定一个值给函数名称来返回值。
下面这个函数过程是求两个整数的和,将这段代码粘貼在代码窗口中,可以通过在立即窗口中输入一个问号后接函数名来激活函数,如下图所示。激活这个函数,求3与4的和为7。
Function Int_Sum(a As Integer, b As Integer)
    Dim Result As Integer
    Int_Sum = a + b
End Function


3.属性过程
Property过程是一系列的Visual Basic语句,它允许程序员去创建并操作自定义的属性。Property过程可以用来为窗体、标准模块以及类模块创建只读属性。声明Property过程的语法如下所示:
[Public|Private] [Static] Property {Get|Let|Set}属性名[(参数) ][As 类型]
语句
End Property
Property过程通常是成对使用的,Property Let与Property Get 一组,而Property Set与Property Get —组,这样声明的属性既可读又可写。单独使用一个Property Get过程声明一个属性,那么这个属性是只读的。Property Set与Property Let功能类似,都可以设置属性。不同的是Property Let将属性设置为等于一个数据类型,而Property Set则将属性设置等于一个对象的引用。
例如,下面的代码使用了 Property Let语句,定义给属性賦值的过程,使用Property Get语句,定义获取属性值的Property过程。该属性用来标识画笔的当前颜色。
Dim CurrentColor As Integer
Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3
'设置绘图盒的画笔颜色属性.
'模块级变量CurrrentColor设为用于绘图的颜色值.
Property Let PenColor(ColorName As String)
    Select Case ColorName    '检査颜色名称字符串
    Case "Red"
        CurrentColor = RED  '设为Red.
    Case "Green"
        CurrentColor = GREEN    'Green.
    Case "Blue"
        CurrentColor = BLUE   '设为Blue.
    Case Else
        CurrentColor = BLACK  '设为缺省值.
    End Select
End Property
'用一个字符串返回画笔的当前颜色.
Property Get PenColor() As String
    Select Case CurrentColor
    Case RED
        PenColor = "Red"
    Case GREEN
        PenColor = "Green"
    Case BLUE
        PenColor = "Blue"
    End Select
End Property
'下面的代码通过调用Property Let过程
'来设置绘图盒的PenColor厲性.
PenColor = "Red"
'下面的代码通过调用Property Get过程
'来获取画笔的颜色.
ColorName = PenColor
4.类模块
类模块是包含新对象的定义的模块。当创建类的新实例时,即创建新对象。模块中定义的过程成为该对象的属性和方法。类模块有3种基本变形:窗体类模块、报表类模块和自定义类模块。
窗体模块中包含了在指定的窗体或其控制的事件所触发的所有事件过程的代码。这些过程用于响应窗体中的事件。可以使用亊件过程来控制窗体的行为,以及它们对用户操作的响应。报表模块与窗体模块类似,不同之处是工程响应和控制的是报表的行为。
数据库的每一个窗体/报表都有内置的窗体观表模块,这些模块包贪事件过程模板。可以向其中添加程序代码,使得当窗体/报表或其上的控件中发生相应的事件时,运行这些程序代码。
自定义类模块不与窗体和报表相关联,允许用户定义自己的对象、属性和方法。
5.标准模块
在标准模块中,放置希望供整个数据库中其他过程使用的过程,这些过程不与任何对象相关联。单击“数据库”窗口中的“模块”选项卡,可以查看数据库中标准模块的列表。
类模块和标准模块的不同点在于存储数据方法的不同。标准模块的数据只有一个备份。这意味着标准模块中一个公共变虽的值改变以后,在后面的程序中再读取该变最时,它将得到改变后的值。而类模块的数据,是相对于类实例(也就是由类创建的每一对象)而独立存在的。
同样,标准模块中的数据在程序作用域内存在,也就是说,它存在于程序的存活期中。而类模块实例中的数据只存在于对象的存活期中,它随对象的创建而创建,随对象的撤消而消失。
最后,当变量在标准模块中声明为Public时,则它在工程中任何地方都是可见的。而类模块中的Public变量,只有当对象变量含有对某一类模块实例的引用时才能访问。

上一节





Access软件网交流QQ群(群号:198465573)
 
 相关文章
视频:access课程第九章1_VBA基础(1)  【whtancky  2012/2/28】
视频:access课程第九章1_VBA基础(2)  【whtancky  2012/2/28】
视频:access课程第九章1_VBA基础(3)  【whtancky  2012/2/28】
VBA基础知识(一)  【缪炜  2012/10/24】
VBA基础知识(二)  【缪炜  2012/10/25】
常见问答
技术分类
相关资源
文章搜索
关于作者

will.miao

文章分类

文章存档

友情链接