创建对对象的引用

在应用程序中,在使用对象的属性、方法和事件之前,必须先声明对象变量,然后将对象引用赋予该变量。如何赋值对象引用取决于两个因素;

如果对象是外部可创建的,可在 Set 语句中用 New 关键字、CreateObject 或 GetObject 从部件外面将对象引用赋予变量。如果对象是从属对象,则需使用高层对象的方法,在 Set 语句中指定一个对象引用。

例如,在 Microsoft Excel 中,应用程序对象是外部可创建的对象,可以从 Visual Basic 应用程序中,通过在 Set 语句中使用的 New 关键字、CreateObject 或 GetObject 直接赋值引用。相反,Range 对象是从属对象,则通过在 Set 语句中使用 Worksheet 对象的 Cells 方法赋值引用。关于外部可创建的对象与从属对象的详细信息,请参阅本章后面的“定位对象模型”。

如果,对象的类包括在类型库中,那么用特定类的变量来创建对象引用,能使应用程序运行得更快。否则,必须使用一般的 Object 类的变量,它导致后期绑定。更详细的信息,请参阅“加速对象引用”一节。

要创建对于在类型库中定义的对象的引用,请按照以下步骤执行:

  1. 从“工程”菜单中选择“引用”。

  2. 在“引用”对话框中,选择 ActiveX 部件的名称,它包含在应用程序中使用的对象的。

  3. 可以使用“浏览”按钮来搜索包含所需对象的类型库文件。类型库可以有 .tlb 或 .olb 扩展文件名。可执行 (.exe) 文件与动态链接库 (dlls) 也可以提供类型库,所以也能使用这些文件的扩展名搜索文件。

    如果不能肯定应用程序是不是 ActiveX-enabled 和能否提供类型库,可以用“浏览”按钮添加一个对于它的引用。如果引用失效,Visual Basic 显示错误信息“不能添加对指定文件的引用”,表示该类型库不存在。关于操作与类型库不相关联对象的详细内容,请参阅“创建对对象的引用” 一节。

  1. 从“查看”菜单中,选择“对象浏览器”查看引用的类型库。从“工程/库”清单中选择适当的类型库。在应用程序中可以使用在“对象浏览器”中列出的全部对象、方法和属性。

    关于使用“对象浏览器”的更详细的信息   请参阅“浏览 ActieX 部件类型库”。

  2. 声明对象类的对象变量。例如,可以声明类 Excel Chart 的变量来引用 Microsoft Excle Chart 对象。
    Dim xlChart As Excel.Chart
    

    关于更详细的信息   请参阅本章后面的“声明对象变量”。

  3. 用 Set 语句中的 New 关键字、CreateObject 或 GetObject 将对象引用赋予变量。关于更详细的信息,请参阅本章后面的“将对象引用赋予变量”。

    如果对象是从属对象,则需使用高层对象的方法,在 Set 语句中指定一个对象引用。

要创建对未在类型库中定义的对象的引用,请按照以下步骤执行:

  1. 声明 Object 数据类型的对象变量。

    因为对象与类型库不相关联,所以不能用“对象浏览器”查看该对象的属性、方法和事件。需要知道对象所提供是什么样的属性、方法和事件,以及创建对从属对象的引用的任何方法。

    关于更详细的信息   请参阅本章后面的“声明对象变量”。

  2. 在 Set 语句中使用 CreateObject 或 GetObjec 给变量赋值对象引用。关于更详细的信息,请参见本章后面的“将对象引用赋予变量”。

    如果对象是从属对象,则需使用高层对象的方法,在 Set 语句中指定一个对象引用。

二义性引用与引用优先权

当代码中引用常数或对象时,在每一个“引用”对话框中选中的类型库中,Visual Basic将按照类型库被显示的次序,搜索常数或对象类。如果两个类型库包含名字相同的常数或类,Visual Basic 使用列在“可使用的引用”框中较高位置上的类型库提供的定义。

图 10.1 “引用”对话框

明确地指定在使用时提供常数或类的类型库,是处理可能的二义性引用的最好方法。例如常数 vbCancel,在 Visual Basic 与 Visual Basic Applications 类型库中代表不同的值。以下代码展示了对常数 vbCancel 的充分限定和二义性引用。

'打印 Visual Basic vbCancel.
Debug.Print "VB.vbCancel = "; VB.vbCancel
'打印 Visual Basic for Applications vbCancel.
Debug.Print "VBA.vbCancel = "; VBA.vbCancel
'二义性引用打印"Available Reference"
'清单最高端的 Visual Basic for Applications 
'中的常数 vbCancel 的值。
Debug.Print "vbCancel = "; vbCancel

下列代码示例表示对一个 Application 对象变量的充分限定与二义性声明。假定在“可使用的引用”框中,Microsoft Word 出现在 Microsoft Excel 之前,xlApp2 是用 Microsoft Word Application 类加以声明,而不是用 Microsoft Excel Application 类声明的。

'充分限定的对象变量声明
Dim xlApp1 As Excel.Application
'二义性对象变量声明
Dim xlApp2 As Application

'赋值对象引用
Set xlApp1 = New Excel.Application
'下面产生类型不匹配错误.
Set xlApp2 = xlApp1

您可能会想要利用改变 Visual Basic 搜索引用的顺序,来处理可能的二义性引用。“引用”对话框有两个“优先级”按钮,用这两个按钮可以把一个类型库移到清单中的较高的地方,这样,它的常数和类会比在清单较低位置而名字相同的常数和类较快地被找到。但是,如果还有其他二义性的引用存在,改变优先权顺序,会在应用程序中引起预料不到的问题。通常,最好还是在引用中明确规定类型库。

注意 在 Microsoft Excel 97 以前的版本不支持引用 Microsoft Excel Application 类的 Excel Application 语法。要在 Microsoft Excel 5.0 和 Microsoft Excel 95 之中引用 Microsoft Excel Application 类,要用 [_ExcelApplication] 语法。例如:

Set xlApp = New [_ExcelApplication]