在Excel中自动添加加载项的单个菜单项

时间:2012-07-27 07:02:11

标签: excel vba excel-vba excel-addins

我正在使用Microsoft Excel 2010 for Windows。

我已经开发了一个加载项addin.xlam,其中包含一个子mainaddin.xlam位于正确的位置,以便通过菜单Developer -> Add-Ins显示和选择。当我打开普通工作簿test.xlsm并按Alt + F11时,我可以看到addin.xlam的代码已加载。

我的目标是在Excel的菜单栏中添加一个菜单项,以允许用户启动main add-in.xlam。按照此linkaddin.xlam中的代码如下:

Option Explicit
Dim cControl As CommandBarButtonPrivate
Sub Workbook_AddinInstall()
    On Error Resume Next 'Just in case

    'Delete any existing menu item that may have been left.
    Application.CommandBars("Worksheet Menu Bar").Controls("Super Code").Delete

    'Add the new menu item and Set a CommandBarButton Variable to it
    Set cControl = Application.CommandBars("Worksheet Menu Bar").Controls.Add

    'Work with the Variable
    With cControl
        .Caption = "Super Code"
        .Style = msoButtonCaption
        .OnAction = "main" 'Macro stored in a Standard Module
    End With
    On Error GoTo 0
End Sub

Private Sub Workbook_AddinUninstall()
    On Error Resume Next 'In case it has already gone.
    Application.CommandBars("Worksheet Menu Bar").Controls("Super Code").Delete
    On Error GoTo 0
End Sub

此代码位于ThisWorkbook的{​​{1}},addin.xlam中也可见。 但我看不到菜单栏中的任何变化。

有谁知道会发生什么?

2 个答案:

答案 0 :(得分:4)

只有在使用Excel Addin Manager“安装”或“卸载”插件时才会触发AddinInstall和AddinUninstall事件。

恕我直言,这可能会导致问题,所以我总是建议使用Workbook_Open和Workbook_BeforeClose事件。

答案 1 :(得分:0)

Charles是对的,您需要将Workbook_AddinInstall()替换为Workbook_Open(),并将Workbook_AddinUninstall()替换为Workbook_BeforeClose()

此外,您需要CommandBarButton而不是CommandBarButtonPrivate

祝你好运!