在有的情况下,可能需要通过菜单命令提供对外接程序的访问。在这个例子中,我们将为新建的外接程序在“工具”菜单中放置一个菜单命令。
以下的过程是以“创建基本的外接程序”中的示例代码为基础设计的。
要为外接程序在“工具”菜单上放置一个菜单命令,请按照以下步骤执行:
Public VBI As VBIDE.VBE 'VBI被赋以指向当前IDE的VBA对象的指针,该对象将作'为参数传到OnConnection过程。必须保留它,因为在断开'该外接程序时将会需要它,其它过程也可能会用到它。Private mcbMenuCommandBarCtrl As _Office.CommandBarControl'这将被设置为新的命令条控件。Private WithEvents MenuHandler As CommandBarEvents'该事件处理过程用于处理新命令栏控件的单击事件。
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 _= TrueEnd Sub
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.DeleteEnd Sub
Private Sub MenuHandler_Click(ByVal _
CommandBarControl As Object, handled As Boolean, _
CancelDefault As Boolean)
MsgBox "You clicked the new menu command."
End Sub
总结一下,现在拥有的外接程序有以下特点: