使用类模块编程

在 Access 中,有两种类型的模块:标准模块和类模块。 在 Access 95 中,类模块仅与窗体或报表相关联。 在 Access 97 中,它们也存在于“数据库”窗口的“ 模块 ”选项卡上。

使用类模块创建自定义对象

使用类模块为自定义对象创建定义。 用于保存类模块的名称将成为自定义对象的名称。 在类模块中定义的公共 SubFunction 过程将成为 对象的自定义方法。 Public Property LetProperty GetProperty Set 过程将成为对象的属性。

在类模块中定义过程后,可以通过创建 类的新实例来创建新对象。 若要新建类实例,需要先使用该类定义的类型声明一个变量。 例如,如果类名称为 ABasicClass,则可以通过以下方式为其新建实例:

Dim abc As New ABasicClass

运行包含此声明的代码时,Visual Basic 会创建新实例。 然后,可以使用变量 来应用其方法和属性。 例如,如果已经自定义了一个名为 ListNames 的方法,则可以通过以下代码应用该方法:

abc.ListNames

(Access 95) 创建窗体类的默认实例

在窗体视图中打开窗体时,无论是从用户界面还是从 Visual Basic 打开窗体时,将创建该窗体的类模块的实例。 换句话说,在内存中指定对象现在存在的空间,然后可以调用其方法,并从代码中设置或返回其属性,就像对任何内置对象一样。 在打印预览中打开报表时也是如此。

在 Visual Basic 代码中引用窗体时,通常使用的是窗体类的默认实例。 每个窗体的类只有一个默认实例。 也可以从 Visual Basic 中为同一窗体的类创建多个实例。 当创建窗体类的多个实例时,就创建了非默认实例。

创建窗体的默认实例有四种方法。 可以通过以下方法来打开已有窗体:使用用户界面、执行 DoCmd 对象的 OpenForm 方法、调用 CreateForm 方法并将新窗体切换到窗体视图,或使用 Visual Basic 创建 Form 类型的变量来引用默认实例。 下面的示例将打开"雇员"(Employees) 窗体,并将 Form 对象变量指向该窗体:

Dim frm As Form 
DoCmd.OpenForm "Employees" 
Set frm = Forms!Employees

Access 还提供了一个快捷方式,使你能够在一个步骤中打开窗体并引用该窗体或其控件之一的方法或属性。 对窗体的类模块的引用如下例所示:

Form_Employees.Visible = True 
Form_Employees.Caption = "New Employees"

运行此代码时,Access 会在窗体视图中打开“员工”窗体(如果尚未打开),并将窗体的标题设置为“新员工”。在显式将其 Visible 属性设置为 True 之前,窗体不可见。 当调用该代码的过程结束时,该窗体实例将被破坏,也就是说会关闭该窗体。

如果在“设计”视图中打开“员工”窗体时尝试运行此代码,Access 将生成运行时错误。 只能在窗体视图中打开该窗体。

如果使用这种语法在窗体视图中对窗体属性或其中一个控件的属性进行更改,则在窗体实例被破坏时这些更改将会丢失。 在对窗体视图中的窗体更改属性设置时总是这样。 必须在设计视图中更改窗体属性,然后将更改随窗体一起保存。

创建表单的多个非默认实例

如果要一次显示一个窗体的多个实例,则可以创建窗体类的多个非默认实例。 例如,您可能需要同时显示雇员和雇员主管的记录。 可以创建两个“雇员”窗体类的实例:一个用来显示雇员记录,另一个显示主管记录。

若要从 Visual Basic 中创建窗体类的非默认实例,必须先声明一个以窗体的类模块名称为类型的变量。 必须在变量声明中包含 New 关键字。 例如,下面的代码将新建一个“Employees”窗体的实例,然后将它分配给一个 Form 类型的变量:

Dim frm As New Form_Employees

该窗体的非默认实例是不可见的(除非明确地设置它的 Visible 属性)。

When the procedure that creates this instance has finished executing, the instance is removed from memory unless you've declared the variable representing it as a module-level variable. Since module-level variables retain their values until they are reset with the Reset command on the Run menu or the Reset button on the toolbar, the form will stay open if the variable has been declared as a module-level variable.

您所设置的任何属性都将影响窗体类的该实例,但不会与窗体一起保存。 此外,如果在设计视图中打开窗体,就无法新建窗体类的实例。

窗体类的非默认实例不能在 Forms 集合中按名称引用。 仅按索引号引用它。 由于可以创建表单的多个非默认实例,并且每个实例具有相同的名称,因此可以在 Forms 集合中拥有多个具有相同名称的 窗体 ,而无需通过索引号来区分它们。

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。