把 Microsoft Binder 作为 ActiveX 容器

Microsoft Office Binder 是一个电子“页剪贴”─ 可以给 Binder 添加几个存在某些联系的不同类型的文档。“文档”可包括:

该主题论述把 Binder 用作 ActiveX 文档的容器的基本概念。

添加 ActiveX 文档

有两种方法可为 Binder 添加 ActiveX 文档:

把 ActiveX 文档当作节来添加

把 ActiveX 文档当作段来添加时,Binder 使用其 ProgID 来添加文档。以这种方式添加 ActiveX 文档,与添加一个空白 Word 文档类似─ 文档是“空白”文档。为了标识“空白”文档,Binder 查找 ActiveX 文档的 ProgID。简而言之,ProgId(或程序 ID)是以句号分隔开的类名和部件名。例如,使用缺省设置值的 ActiveX 文档的 ProgID 应当是 "Project1.UserDocument1"。

注意 添加新的段时,是从 ActiveX 文档类创建新的对象,因而,总是发生 InitProperties 事件(而不是 ReadProperties 事件)。

详细信息 关于程序 Ids 的详细信息,请参阅“部件设计的一般准则”中的“给部件添加类”。

要将 ActiveX 文档当作节来添加,请按照以下步骤执行:

  1. 启动 Microsoft Binder。

  2. 单击“稿件”菜单上的“稿件”,打开“添加”对话框。

  3. 从 ProgIDs 的可滚动列表中,双击 ActiveX 文档。

把 ActiveX 文档当作文件来添加

把 ActiveX 文档当作文件来添加时,可以选择以前保存的特定的 .vbd 文件。

注意 如果已经创建了保持数据(通过 PropertyBag)的 ActiveX 文档,并且已经把数据保存到该文件中,则添加那个 .vbd 文件将产生 ReadProperties 事件。但是,如果没有编写代码来保持数据,则激发 InitProperties 事件。关于保持数据的详细信息,请参阅本章中的“保持 ActiveX 文档数据”。

要将 ActiveX 文档当作文件来添加,请按照以下步骤执行:

  1. 启动 Microsoft Binder。

  2. 单击“稿件”菜单的“从文件添加”,打开“从文件添加”对话框。

  3. 移动到 .vbd 文件,并单击“添加”。

在 Binder 中保存 ActiveX 文档

和配联程序中的其它文档一样,可以把 ActiveX 文档当作一组文档中的一个来保存。以这种方法保存 ActiveX 文档时,会激发 WriteProperties 事件。然而,为了真正保持文档的数据,必须为 WriteProperties 事件编写适当的代码。

要在 Binder 中保存 ActiveX 文档,请按照以下步骤执行:

  1. 把 ActiveX 文档当作段或文件来添加。

  2. 在“文件”菜单上,单击“保存活页夹”来打开“活页夹另存为”对话框。

  3. 键入 Binder 的名称,然后单击“保存”。

Binder 编程

可以创建通过编程操作其它段的 ActiveX 文档。要实现这个目的,必须了解 Binder 的对象模型。

Binder 的对象模型围绕一个 Section 对象的集合,Sections 集合,来构造的。每个 Section 对象可以包含 Microsoft Excel、Word、PowerPoint、或 Visual Basic ActiveX 文档。使用这些知识,可以浏览 Sections 并对每个文档获得一个引用。使用该引用,就可以操作该文档的对象。在简单的过程中解释它更容易。

示例:操作 Excel 电子数据表

下面的方案足够简单:给 Binder 添加 Excel 工作表和 ActiveX 文档,并使用 ActiveX 文档,从工作表中检索一个值。

要从 Excel 工作表中检索一个值,请按照以下步骤执行:

  1. 单击 Visual Basic 的“文件”菜单上的“新建工程”。然后单击“ActiveX 文档 DLL”图标。

  2. 在“工程资源管理器”窗口中双击“UserDocument1”,以显示其设计器。

  3. 在该设计器上绘制 TextBox 控件,并把它的名称改为 "txtCell"。

  4. 在该设计器上绘制 CommandButton 控件,并把它的标题改为 "Get Value"。

  5. 在“工程”菜单上,单击“引用”显示“引用”对话框。

  6. 从引用的滚动列表中,单击“OLE Automation Binder 1.0”类型库复选框。

  7. 双击“CommandButton”,显示其代码窗口。

  8. 把下面的代码添加到 Command1 Click 事件中。
    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
    
  9. 按 F5 键,运行该工程。

  10. 最小化 Visual Basic 实例。

  11. 启动 Microsoft Binder。

  12. 在“稿件”菜单上,单击“添加”。

  13. 双击“Microsoft Excel 工作表”。把一个空白工作表添加到 Binder 中。

  14. 在单元格 A1 中键入有区别的号码或文本(它已经被选定,故可以简单地开始键入)。

  15. 在“稿件”菜单上,单击“添加”。

  16. 双击“Project1.UserDocument1”。

  17. 单击“Get Value”。刚才键入电子数据表中的文本或号码将显示在文本框中。

代码说明

因为想要早期绑定对象标量,所以第六步要求给 OLE Automation Binder 类型库添加引用。因而,在代码中,声明 Sections 类型的对象变量。然后,代码将变量设置到 Binder 的 Sections 集合。

有了对集合的引用,就可以用 For 语句重复查看其成员。在 For 查看中,可用 TypeName 函数来返回段中每个对象的类型。如果 TypeName 函数返回 "Worksheet",就可知道在集合中的是 Excel 工作表。确定了这个情况后,代码就将单元格 A1 的内容简单地返回到 TextBox 控件。

另一个示例:添加第二个 ActiveX 对象

添加另一个 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 '假定存在公共的函数。