创建激活外接程序的菜单命令

在有的情况下,可能需要通过菜单命令提供对外接程序的访问。在这个例子中,我们将为新建的外接程序在“工具”菜单中放置一个菜单命令。

以下的过程是以“创建基本的外接程序”中的示例代码为基础设计的。

要为外接程序在“工具”菜单上放置一个菜单命令,请按照以下步骤执行:

  1. 确认在“引用”对话框中选择了“Microsoft Office 8.0 Object Library”。从而能够访问 Office 命令条对象。

  2. 在类模块的 General Declarations 部分添加以下代码:
    Public VBI As VBIDE.VBE
    'VBI 被赋以指向当前 IDE  VBA 对象的指针,该对象将作
    '为参数传到 OnConnection 过程。必须保留它,因为在断开
    '该外接程序时将会需要它,其它过程也可能会用到它。
    
    Private mcbMenuCommandBarCtrl As _
    Office.CommandBarControl
    '这将被设置为新的命令条控件。
    
    Private WithEvents MenuHandler As CommandBarEvents
    '该事件处理过程用于处理新命令栏控件的单击事件。
    
  3. 该外接程序被连接至“外接程序管理器”之后,下述过程将被调用。它在“工具”菜单中添加了一个新的菜单命令“My New Add-In”。在 IDTExtensibility_OnConnection 过程中删去 MsgBox 行并添加下述语句:
    Private Sub IDTExtensibility_OnConnection _
    (ByVal VBInst As Object, _
    ByVal ConnectMode As VBIDE.vbext_ConnectMode, _
    ByVal AddInInst As VBIDE.AddIn, _
    custom() As Variant)
    
    '保存 Visual Basic 的当前实例。
    Set VBI = VBInst
    '添加一个菜单命令到“工具”菜单。
    Set mcbMenuCommandBarCtrl = _
    VBI.CommandBars("Tools").Controls.Add(before:=3)
    '在新的菜单命令前
    '放置一个分隔条。
    mcbMenuCommandBarCtrl.BeginGroup = True
    '设定该外接程序的名称。
    mcbMenuCommandBarCtrl.Caption = "My New Add-In"
    '复制图标位图至剪贴板。
    Clipboard.SetData _
    LoadPicture("c:\windows\triangles.bmp")
    '将图标从剪贴板复制到菜单命令上。
    mcbMenuCommandBarCtrl.PasteFace
    '连接事件处理程序,
    '以接收新的命令条控件的事件。
    Set MenuHandler = _
    VBI.Events.CommandBarEvents _
    (mcbMenuCommandBarCtrl)
    '在新的菜单命令之后放置一个分隔条。
    VBI.CommandBars("Tools").Controls(4).BeginGroup _
    = True
    End Sub
    
  4. 当外接程序被断开的时候,下述过程将被调用。在外接程序断开后,mcbMenuCommandBar.Delete 行确保“工具”菜单中的相应菜单命令将被删除。在 IDTExtensibility_OnDisconnection 过程中添加下述语句行(如果愿意,可以从原始的代码中删掉 MsgBox 行):
    Private Sub IDTExtensibility_OnDisconnection _
    (ByVal VBInst As Object, ByVal LoadMode As _
    Long, ByVal AddInInst As VBIDE.AddIn, custom() _
    As Variant)
    ' Tools 菜单删除新的菜单命令。
    mcbMenuCommandBarCtrl.Delete
    End Sub
    
  5. 单击“工具”菜单中的新菜单命令时,MenuHandler_Click 事件将被调用。这里的可选的消息框函数仅仅表明 Click 事件已被正确截取。将下述过程添加到该外接程序的类模块,利用下拉列表框可以插入事件处理程序:
    Private Sub MenuHandler_Click(ByVal _
    CommandBarControl As Object, handled As Boolean, _
    CancelDefault As Boolean)
    MsgBox "You clicked the new menu command."
    End Sub
    
  6. 保存并编译此工程(作为 ActiveX 部件)。

  7. 启动一个新的工程,并通过“外接程序管理器”激活该外接程序。

  8. 查看“工具”菜单,注意现在有了一项“My New Add-In”菜单命令。

  9. 单击新的菜单命令,将出现一个对话框以确认对菜单的单击。

  10. 在“外接程序管理器”中断开外接程序,注意该菜单命令将从“工具”菜单中删除。

总结一下,现在拥有的外接程序有以下特点: