使用外部可创建对象和从属对象

如何创建由部件提供的对象引用,取决于对象是一个外部可创建对象还是从属对象。可以直接创建对外部可创建对对象的引用;使用部件对象层次中较高层对象的方法,可间接创建对从属对象的引用。

外部可创建对象

大多数大型 ActiveX-enabled 应用程序和其它 ActiveX 部件,在它们的对象层次中提供了一个顶层外部可创建对象:

例如,每个 Microsoft Office 应用程序提供一个顶层 Application 对象。下面的例子显示如何赋值对于 Microsoft Excel、 Microsoft Word 和 Microsoft Access 的 Application 对象的引用:

Dim xlApp As Excel.Application
Dim wdApp As Word.Application
Dim acApp As Access.Application

Set xlApp = New Excel.Application
Set wdApp = New Word.Application
Set acApp = New Access.Application

然后,可以用这些变量来访问在每个应用程序中的从属对象、以及这些对象的属性和方法。更详细的信息,请参阅“创建对对象的引用”。

注意 早于 Microsoft Excel 97 的版本不支持引用 Microsoft Excel Application 类的语法 Excel.Application。必须用 [_ExcelApplication] 语法来引用 Microsoft Excel 5.0 和 Microsoft Excel 95 中的 Microsoft Excel Application 类。例如:

Set xlApp = New [_ExcelApplication]

除了这些顶层外部可创建对象外,ActiveX 部件也可以提供部件对象层次的较低层次上的外部可创建对象。这些对象可以被访问。如果作为外部可创建对象,则直接访问;如果作为较高层的外部可创建对象的从属对象,则间接访问。例如,可以直接或间接地创建对 DAO TableDef 对象的引用:

   ' 创建对 daoTable1 的直接引用。
   Dim daoTable1 As DAO.TableDef
   Set daoTable1 = New DAO.TableDef
   daoTable1.Name = "Table1"

   ' 创建对 daoTable2 的间接引用,
   ' 作为 DAO DBEngine对象的从属对象。
   Dim daoDBE As DAO.DBEngine
   Dim daoWs As DAO.Workspace
   Dim daoDb As DAO.Database
   Dim daoTable2 As DAO.TableDef

   Set daoDBE = DAO.DBEngine
   Set daoWs = daoDBE.Workspaces(0)
   Set daoDb = daoWs.CreateDatabase("db1.mdb", _
   dbLangGeneral)
   Set daoTable2 = daoDb.CreateTableDef("Table2")

有些对象提供一个 Application 对象,但是,使用另外的名字。例如,Microsoft Access 中的 Microsoft Jet 数据库引擎把其顶层对象称为 DBEngine 对象。

从属对象

仅能用一种方法获得对从属对象的引用,即通过使用一个外部可创建对象的属性或方法返回对从属对象的引用。从属对象位于对象层次中的较低层,并且仅可通过使用外部可创建对象的方法被访问。例如,假设要从 Microsoft Excel 引用 Button 对象。就不可以使用下列代码(否则会产生错误的结果):

Dim xlButton As Excel.Button
Set xlButton = New Excel.Button

而是使用下列代码,来获得对 Button 对象的引用:

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlButton As Excel.Button

Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add
Set xlButton = xlSheet.Buttons.Add(44, 100, 100, 44)

'现在可以使用 Button 对象属性。
xlButton.Caption = "FirstButton"

图 10.5 说明 Visual Basic 应用程序是如何获得对 Button 对象的引用。

图 10.5 访问从属对象