Excel加载项上下文菜单按钮

时间:2018-08-09 19:30:50

标签: excel vba excel-vba

我有一个已创建的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

2 个答案:

答案 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_SheetBeforeRightClickWorkbook_Deactivate将运行。如果仅在右键单击或停用所选工作簿时才希望代码运行,则必须在该特定工作簿的代码中包含该代码。


但是


由于您正在尝试使其与外接程序配合使用,因此我将介绍一些相关的要点,因为一旦加载了外接程序,便可以从访问该外接程序(及其功能)所有其他打开的工作簿。

  • 如果在任何一本书中右键单击页面((如已编码,如果可以的话))时将该选项添加到上下文菜单,则删除上下文菜单停用任何工作簿时,该选项都不会产生任何可见效果,因为下次发生右键单击时,该选项将再次可见。

  • 是否有一个原因,为什么不能仅在打开外接程序(外接程序Workbook_Open)时添加上下文菜单,而在关闭外接程序(外接程序{{1 }})? (因为这将明显具有与上述代码相同的效果。)