Microsoft Office Binder 是一个电子“页剪贴”─ 可以给 Binder 添加几个存在某些联系的不同类型的文档。“文档”可包括:
该主题论述把 Binder 用作 ActiveX 文档的容器的基本概念。
有两种方法可为 Binder 添加 ActiveX 文档:
把 ActiveX 文档当作段来添加时,Binder 使用其 ProgID 来添加文档。以这种方式添加 ActiveX 文档,与添加一个空白 Word 文档类似─ 文档是“空白”文档。为了标识“空白”文档,Binder 查找 ActiveX 文档的 ProgID。简而言之,ProgId(或程序 ID)是以句号分隔开的类名和部件名。例如,使用缺省设置值的 ActiveX 文档的 ProgID 应当是 "Project1.UserDocument1"。
注意 添加新的段时,是从 ActiveX 文档类创建新的对象,因而,总是发生 InitProperties 事件(而不是 ReadProperties 事件)。
详细信息 关于程序 Ids 的详细信息,请参阅“部件设计的一般准则”中的“给部件添加类”。
要将 ActiveX 文档当作节来添加,请按照以下步骤执行:
把 ActiveX 文档当作文件来添加时,可以选择以前保存的特定的 .vbd 文件。
注意 如果已经创建了保持数据(通过 PropertyBag)的 ActiveX 文档,并且已经把数据保存到该文件中,则添加那个 .vbd 文件将产生 ReadProperties 事件。但是,如果没有编写代码来保持数据,则激发 InitProperties 事件。关于保持数据的详细信息,请参阅本章中的“保持 ActiveX 文档数据”。
要将 ActiveX 文档当作文件来添加,请按照以下步骤执行:
和配联程序中的其它文档一样,可以把 ActiveX 文档当作一组文档中的一个来保存。以这种方法保存 ActiveX 文档时,会激发 WriteProperties 事件。然而,为了真正保持文档的数据,必须为 WriteProperties 事件编写适当的代码。
要在 Binder 中保存 ActiveX 文档,请按照以下步骤执行:
可以创建通过编程操作其它段的 ActiveX 文档。要实现这个目的,必须了解 Binder 的对象模型。
Binder 的对象模型围绕一个 Section 对象的集合,Sections 集合,来构造的。每个 Section 对象可以包含 Microsoft Excel、Word、PowerPoint、或 Visual Basic ActiveX 文档。使用这些知识,可以浏览 Sections 并对每个文档获得一个引用。使用该引用,就可以操作该文档的对象。在简单的过程中解释它更容易。
下面的方案足够简单:给 Binder 添加 Excel 工作表和 ActiveX 文档,并使用 ActiveX 文档,从工作表中检索一个值。
要从 Excel 工作表中检索一个值,请按照以下步骤执行:
Private Sub Command1_Click() Dim i As Integer '
计数器Dim objX As Sections '
对象变量Set objX = UserDocument.Parent.Parent.Sections
For i = 1 to objX.Count
If TypeName(objX.Item(i).Object) = _
"Worksheet" Then
txtCell = objeX.Item(i).Object.Range. _
("A1").Value
End If
Next i
End Sub
因为想要早期绑定对象标量,所以第六步要求给 OLE Automation Binder 类型库添加引用。因而,在代码中,声明 Sections 类型的对象变量。然后,代码将变量设置到 Binder 的 Sections 集合。
有了对集合的引用,就可以用 For 语句重复查看其成员。在 For 查看中,可用 TypeName 函数来返回段中每个对象的类型。如果 TypeName 函数返回 "Worksheet",就可知道在集合中的是 Excel 工作表。确定了这个情况后,代码就将单元格 A1 的内容简单地返回到 TextBox 控件。
添加另一个 ActiveX 文档到 Binder 也是用 Sections 集合来实现的,然而,这次使用的是 Sections 集合的 Add 方法。
Option Explicit Private mMyDoc2 As axdDoc2 '
模块级变量Private Sub AddDoc_Click()
Dim objX As Sections '
对象变量Set objX = UserDocument.Parent.Parent.Sections
Set mMyDoc2 = objX.Add( , "c:\axdDoc2.vbd")
End Sub
前面的代码也使用了 Sections 集合,但改为用 Add 方法来添加第二个 ActiveX 文档到配联程序。可能已经注意到,代码也把模块级变量声明为 axdDoc2 类型(假定它是第二个文档的名称)。该代码把对象变量设置给 Add 方法返回的引用,然后,可以用该引用来访问第二个文档的公共属性和方法,如下所示:
txtName.Text = mMyDoc2.Name '
假定有一个Name
公共属性。mMyDoc.MyMethod '
假定存在公共的函数。