我有一个已创建的Excel加载项(.xlam文件),我试图在右键单击菜单上使用此加载项创建按钮,以便我可以根据所选单元格快速运行宏。我将代码添加到ThisWorkbook中,并且可以在xlsm文件中使用。 (我从HERE复制了代码。)我将SaveAs保存到xlam,加载了加载项,但上下文菜单上没有任何显示。我有一种感觉,这些潜艇没有通过加载加载。但是,我可以在Workbook_Open中获取代码以起作用。有人可以指出我正确的方向吗?
Private Sub Workbook_Deactivate()
On Error Resume Next
With Application
.CommandBars("Cell").Controls("Open Drawing").Delete
End With
On Error GoTo 0
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim cmdBtn As CommandBarButton
On Error Resume Next
With Application
.CommandBars("Cell").Controls("Open Drawing").Delete
Set cmdBtn = .CommandBars("Cell").Controls.Add(Temporary:=True)
End With
With cmdBtn
.Caption = "Open Drawing"
.Style = msoButtonCaption
.OnAction = "Open_Drawing_Main"
End With
On Error GoTo 0
End Sub
答案 0 :(得分:3)
您必须使用AddinInstall
事件。我认为您的上下文菜单过程可以正常工作。因此,双击加载文件中的ThisWorkbook(在安装它并将其另存为xlam之前),从上方的写入下拉菜单中选择AddinInstall
事件,并放置如下代码:
Private Sub Workbook_AddinInstall()
Call AddToRightClickMenuOptions_Main
End Sub
此代码AddToRightClickMenuOptions_Main
中的是创建上下文菜单的子项。请注意,卸载外接程序时,您可能想删除上下文菜单:
Private Sub Workbook_AddinUninstall()
Call DeleteFromRightClickMenuOptions_Main
End Sub
其中DeleteFromRightClickMenuOptions_Main
是删除上下文菜单的例程(您可以在Internet上轻松找到代码)
答案 1 :(得分:1)
Excel加载项(至少是我创建的加载项)仍然具有自己的工作簿。右键单击或停用 .xlam 的工作簿时,Workbook_SheetBeforeRightClick
和Workbook_Deactivate
将运行。如果仅在右键单击或停用所选工作簿时才希望代码运行,则必须在该特定工作簿的代码中包含该代码。
但是
由于您正在尝试使其与外接程序配合使用,因此我将介绍一些相关的要点,因为一旦加载了外接程序,便可以从访问该外接程序(及其功能)所有其他打开的工作簿。
如果在任何一本书中右键单击页面(将(如已编码,如果可以的话))时将该选项添加到上下文菜单,则删除上下文菜单停用任何工作簿时,该选项都不会产生任何可见效果,因为下次发生右键单击时,该选项将再次可见。
是否有一个原因,为什么不能仅在打开外接程序(外接程序Workbook_Open
)时添加上下文菜单,而在关闭外接程序(外接程序{{1 }})? (因为这将明显具有与上述代码相同的效果。)