如何使用 VBA 和 Office Developer 创建 Office COM 外接程序

文章翻译 文章翻译
文章编号: 306130 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍如何在启动 Microsoft Excel 或 Microsoft Word 时显示一个欢迎您的用户窗体。组件对象模型 (COM) 外接程序提供一种方法,该方法可以将通用代码集中到一个已编译的动态链接库 (DLL) 中,您可以很容易地在任何 Office 应用程序中实现该库(例如,您可以从 Excel、Word 和 Microsoft Access 访问 Microsoft Outlook 联系人)。在 Microsoft Office 中开发 COM DLL 最简单的方法是使用外接程序项目,这种方法会提供一个设计器和对 IDTExtensibility2 库的引用。

要求

本文假定您熟悉下列主题:

  • 在 Office XP 应用程序中创建 Visual Basic for Applications (VBA) 过程。
  • 在 VBA 中使用用户窗体。
  • 自定义 Office XP 工具栏。

创建外接程序项目

如果您安装了 Microsoft Office Developer 2000 或 Microsoft Office XP Developer 工具,则可以在任何 Microsoft Office 2000 或 Microsoft Office XP 应用程序中创建外接程序项目。本例将使用 Microsoft Word 2002。
  1. 启动 Microsoft Word 2002。
  2. 工具菜单上,指向,然后单击 Visual Basic 编辑器
  3. 在 Visual Basic 编辑器 (VBE) 中,单击文件菜单上的新建项目
  4. 新建项目对话框中,单击 Add-In Project。这将自动提供一个外接程序设计器。
  5. 如果看不到“属性”窗口,请单击视图菜单上的属性窗口
  6. 在“属性”窗口中,将项目的名称从 AddInDesigner1 改为 WelcomeAddIn。
  7. 插入菜单上,单击用户窗体以插入一个用户窗体。
  8. 从工具箱中向此用户窗体中添加一个标签和一个命令按钮。
  9. 在“属性”窗口中,将这些控件的属性更改为符合下表中的值:
    收起该表格展开该表格
    控件属性
    LabelNamelblMessage
    CaptionWelcome
    Font14pt
    AutoSizeTrue
    CommandButtonNamecmdOK
    CaptionOK
    UserFormNamefrmWelcome

  10. 插入菜单上,单击模块以插入一个标准模块。
  11. 将以下全局字符串变量声明添加到此标准模块中:
    Public gstrUserName As String
    'This variable will be used to store the name of the user as defined
    'in the Options dialog boxes (from the Tools menu) in Word and Excel.
    					
  12. 在此模块中,添加以下代码来创建一个名为 DisplayForm 的公共子过程,以在屏幕上显示此窗体:
    Public Sub DisplayForm()
      frmWelcome.Show vbModal
    End Sub
    					
  13. 查看 frmWelcome 窗体的代码窗口,并将以下代码添加到 UserForm_Initialize 事件中,使标签标题与字符串变量相连接:
    lblMessage.Caption = lblMessage.Caption & " " & gstrUserName
    					
  14. 将以下代码添加到命令按钮 cmdOKClick 事件中以卸载此窗体:
    Unload me
    					

更改外接程序设计器的属性

请按照下列步骤操作来更改设计器的属性,以使此外接程序在 Microsoft Excel 启动时启动:
  1. 在项目资源管理器中,双击该组件以返回到外接程序设计器。
  2. 在设计器的常规选项卡上,将设计器的属性更改为符合下表中的值:
    收起该表格展开该表格
    属性
    AddIn Display NameFunFormMessage
    AddIn DescriptionThis contains code that is specific to Excel
    ApplicationMicrosoft Excel
    Application VersionMicrosoft Excel 10.0
    Initial Load BehaviorStartup

实现 IDTExtensibility2 事件

  1. 视图菜单上,单击代码以查看此设计器所属的代码模块。
  2. 工具菜单上,单击引用,并设置对 Microsoft Excel 对象库的引用。
  3. 对象下拉列表中,单击 AddinInstance。在过程下拉列表中,单击 OnConnection

    该事件对于创建命令栏按钮或者将代码与事件(例如,当此外接程序连接到宿主应用程序时发生的应用程序事件)相关联来说很有用。
  4. 将以下代码添加到 AddinInstance_OnConnection 事件过程中,以便将用户名称存储在全局变量 strUserName 中并调用 DisplayForm 过程:
    gstrUserName = Application.UserName
    DisplayForm
    					
  5. 在 VBE 中单击保存,并将此项目命名为 Welcome.vba。

添加另一个设计器

在此过程中,您要添加另一个设计器,以便在 Microsoft Word 中实现同样的功能。
  1. 在 VBE 中创建另一个外接程序项目。默认情况下将创建 AddInProject2。
  2. 在项目资源管理器中,将新的外接程序设计器界面 (AddInDesigner1) 拖到您现有的外接程序项目中。此项目中将有两个设计器。
  3. 在项目资源管理器中,右键单击 AddInProject2,然后单击关闭项目以删除刚才创建的项目。
  4. 当您收到以下或类似的消息时:
    Project AddInProject2 has been modified.Do you wish to save it?
    单击
  5. 更改设计器的属性,将 Word 10 指定为目标应用程序并且在启动时装载。
  6. 将以下代码添加到新 Word 设计器的 AddinInstance_OnConnection 事件过程中,这些代码与前面为 Excel 设计器的 OnConnection 事件编写的代码相同:
    gstrUserName = Application.UserName
    DisplayForm
    					

调试外接程序

  1. 如果您愿意,可以向代码中添加适当的断点。
  2. 在 VBE 中,单击运行菜单上的运行项目,以运行此外接程序。
  3. 启动 Microsoft Excel。当该项目启动时,您可能会看到一个外接程序设计器的对话框。请单击此选项以启动一个应用程序,然后浏览到 Excel.exe。如果不出现此对话框,则单击开始,指向程序,然后单击 Microsoft Excel 以启动 Excel。您的用户窗体应该会出现。
  4. 如果 COM 外接程序管理器尚不可用,请按如下所示向工具栏中添加 COM 外接程序命令:
    1. 工具菜单上,单击自定义
    2. 自定义对话框中的命令选项卡上,将 COM 外接程序命令从工具类别中拖到工具栏上,或者拖到工具菜单的 CommandBarPopup 对象上。
  5. 单击 COM 外接程序命令栏以显示 COM 外接程序管理器 (CAM)。CAM 中的列表将显示加载的所有外接程序。
  6. 要测试 OnConnection 事件,请清除 CAM 中的欢迎外接程序复选框,然后单击确定。重新显示 CAM,选中欢迎复选框,然后单击确定。用户窗体应该再次出现。
  7. 关闭宿主应用程序(Word 或 Excel),然后在 VBE 中,单击运行菜单上的停止项目,以停止运行此项目。

验证外接程序是否工作

现在您可以编译该外接程序,并验证它是否在另一台计算机上工作。
  1. 在 VBE 中保存此项目。这是您的可编辑版本。在编译状态不允许您进行修改。
  2. 文件菜单上,单击生成 Welcome.DLL
  3. 使用 regsvr32 命令按如下所示注册此 DLL:
    1. 从 Windows 开始菜单中,单击运行
    2. 打开文本框中,键入以下文本:
      regsvr32 <path>\Welcome.DLL
      其中 <path> 是此 DLL 的文件系统路径。
  4. 单击确定以确认注册此 DLL。
  5. 运行 Excel 和/或 Word。您的用户窗体应该会出现。如果您看不到您的用户窗体,请单击工具菜单上的 COM 外接程序,然后选中欢迎复选框。
注意:分发此 DLL 最简单的方法是使用打包和部署向导。

疑难解答

  • 确保编写简短有效的代码以用于将外接程序加载到内存中。例如,如果在启动时您的 OnConnection 事件会处理数据库数据,则您的用户会认为计算机已停止响应(挂起)。
  • 使用用户窗体时一定要小心。如果用户在宿主应用程序中单击,则该用户可能会认为自己已经丢失了窗体,因为该窗体被隐藏在宿主应用程序后面。相反,应该使您的窗体成为有模式窗体以解决此问题。要使窗体成为有模式窗体,请按如下所示使用 vbModal 常量:
    frmMyUserForm.Show vbModal
    						
    要了解就本例而言这段代码的合适之处,请参见创建外接程序项目 一节的步骤 12 中的代码。

参考

要获得外接程序模板,请参考 Office XP Developer CD 中的 \Samples\Working with AddIns\VBA_COM_AddIn 文件夹。

有关创建命令栏按钮的其他信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/html/deovrCreatingCommandBar.asp
有关如何设计 Outlook 外接程序的信息,请访问以下 MSDN 网站上的 MSDN Code Center:
http://msdn.microsoft.com/code/default.asp?url=/msdn-files/026/000/118/massmail_design_htm.asp

属性

文章编号: 306130 - 最后修改: 2005年12月23日 - 修订: 4.1
这篇文章中的信息适用于:
  • Microsoft Office XP Developer Edition
  • Microsoft Office XP Professional
关键字:?
kbhowtomaster KB306130
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com