创建基本的外接程序

建立外接程序的工作主要是创建类模块,用于处理外接程序专门的事件以及其它用户指定的事件,另外还包括用户的支持模块和窗体。除非需要有在相同的 IDE 中运行同一个外接程序的多个实例,否则,所有的类过程都必须声明为 “私有的”,以防其它例程随便地引用它们。

因为外接程序必须是 ActiveX 部件,所以,在完成外接程序的代码之后,必须将其作为 ActiveX.dll 或者 .exe 文件进行编译。由于种种原因,一般情况下最好将外接程序创建为 ActiveX.dll 文件。

详细信息   关于对 .exe 和 .dll 文件类型的外接程序的简单比较,请参阅“如何建立外接程序”中的“编译外接程序”。

初次涉足,先建立一个非常简单的外接程序,它只演示如何使用外接程序的基本部件─类模块。以后将解释该例是如何工作的。

注意   下面的过程引导您手工创建外接程序。或者,您可以只创建一个外接程序工程,则所有的基本外接程序结构都会为您创建好。

要创建 AddInProject 外接程序,请按照以下步骤执行:

  1. 在“文件”菜单中,单击“新建工程”打开“新建工程”对话框。(这将关闭当前的工程或工程组;并提示保存所作的改动。)双击 “ActiveX DLL”图标创建一个新的工程。

  2. 单击“工程”菜单,然后单击“引用”,选择“Microsoft Visual Basic 5.0 扩展”和“Microsoft Office 8.0 Object Library”复选框。

    这样就可以对创建外接程序所需的可扩展性对象和集合进行访问。

  3. 单击“工程”菜单,再单击“添加模块”,在“添加模块”对话框中双击“模块”图标,创建一个新的模块。

    注意,有一个对应于 AddIn 模板的图标。该模板包括外接程序必备的一些启动代码。

    在新模块中输入以下代码:

    Declare Function WritePrivateProfileString& Lib _ 
    "kernel32" Alias "WritePrivateProfileStringA" _ 
    (ByVal AppName$, ByVal KeyName$, ByVal _ 
    keydefault$, ByVal FileName$)
    Sub AddToINI()
    Dim rc As Long
    rc = WritePrivateProfileString("Add-Ins32", _ 
    "AddInProject.AddInClass", "0", "VBADDIN.INI")
    MsgBox _ 
    "Add-in is now entered in VBADDIN.INI file."
    End Sub
    

    或者,您可以用外接程序设计器为您的外接程序创建引用。有关如何进行的详细指令,请参阅第四章“连接和显露外接程序”中的“引用外接程序”。

  4. 在“工程资源管理器”窗口中,双击类模块 Class1 将其显示出来。将 Name 属性设置为“AddInClass”,并确认其 Instancing 属性为 "5 – MultiUse"。

  5. 将以下代码行添加到类模块中:
    Implements IDTExtensibility
    

    这样将在工程中增加一个 IDTExtensibility 对象的引用。

  6. 在“对象”框中单击“IDTExtensibility”。

    注意,四个新的事件将出现在“过程”框中:OnConnection、OnDisconnection、OnStartupComplete以及 OnAddInsUpdate。

  7. 单击“过程”框中的每个事件,把它们的过程添加到类模块中。

    虽然可以手工地输入过程语法,这里仍然强烈建议以单击框中的事件名的方式将过程添加至类模块中,从而确保所有的名称和参数均输入正确。另外,这样会快得多!

    要使外接程序正常工作,所有这些事件过程都必须出现在类模块中。另外,如果有一个或多个事件过程中没有任何代码,则在编译时它将被删除,因此,至少需要在每个事件过程中加入一句注释,以确保编译时它们被保留在类模块中,这是很重要的。

  8. 既然已经添加了四个事件,再加上以下代码:
    Private Sub IDTExtensibility_OnConnection(ByVal _ 
    VBInst As Object, ByVal ConnectMode As _ 
    VBIDE.vbext_ConnectMode, ByVal AddInInst As _ 
    VBIDE.AddIn, custom() As Variant)
    MsgBox "Add-in is now connected"
    End Sub
    
    Private Sub IDTExtensibility_OnDisconnection(ByVal _ 
    RemoveMode As VBIDE.vbext_DisconnectMode, _ 
    Custom () as Variant)
    MsgBox "Add-in is now disconnected"
    End Sub
    
    Private Sub IDTExtensibility_OnStartupComplete _ 
    (custom() As Variant)
    '增加注释的目的是
    '防止过程在编译的时候被删除。
    End Sub
    
    Private Sub IDTExtensibility_OnAddInsUpdate _ 
    (custom() As Variant)
    '增加注释的目的是
    '防止过程在编译的时候被删除。
    End Sub
    
  9. 在“工程”菜单中,单击“Project1 属性”,然后在“工程名称”框中输入 AddInProject,然后单击“确定”。

  10. 在“文件”菜单中,单击“保存工程”保存工程文件。按下述表格对其命名。Visual Basic 将自动提供下面显示的扩展名。
    文件 文件名 扩展名
    Basic module AddIn .bas
    Class module AddInClass .cls
    Project AddInProject .vbp

要测试 AddInProject 外接程序,请按照以下步骤执行:

  1. 单击“文件”菜单,再单击“生成 AddInProject.dll”。在“生成工程”对话框中单击“确定”。

    这将把外接程序注册到系统注册表。

  2. 在“立即”窗口中,输入 AddToINI 然后按RETURN 键。随后将出现一个消息框显示出“外接程序现在进入到 VBADDIN.INI 文件中”。

  3. 在“文件”菜单中,单击“新建工程”打开“新建工程”对话框。(这将关闭 AddInProject.vbp,并提示保存所作的改动。)双击“标准 EXE”图标创建一个新的工程。

  4. 单击“外接程序”菜单,再单击“外接程序管理器”。注意列表中将出现一个新的条目:“AddInProject.AddInClass”。

  5. 选择“AddInProject.AddInClass”复选框,然后单击“确定”。

    这时,将出现以下对话框:

  6. 单击“确定”,清除“AddInProject.AddInClass”复选框,然后再单击“确定”。

    这时将出现以下对话框:

刚才发生了什么

这个外接程序的作用是说明外接程序的部件,以及类模块这一基本部件的特点。下面将遍历上述各步骤,讨论每一步做了些什么,更重要的是:怎样做以及为什么这么做。