在有的情况下,可能需要通过菜单命令提供对外接程序的访问。在这个例子中,我们将为新建的外接程序在“工具”菜单中放置一个菜单命令。
以下的过程是以“创建基本的外接程序”中的示例代码为基础设计的。
要为外接程序在“工具”菜单上放置一个菜单命令,请按照以下步骤执行:
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 _
= True
End 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.Delete
End Sub
Private Sub MenuHandler_Click(ByVal _
CommandBarControl As Object, handled As Boolean, _
CancelDefault As Boolean)
MsgBox "You clicked the new menu command."
End Sub
总结一下,现在拥有的外接程序有以下特点: