Автоматически добавлять один элемент меню надстройки в Excel

Я использую Microsoft Excel 2010 для Windows.

Я уже разработал надстройку addin.xlam, которая содержит подпрограмму main. addin.xlam находится в нужном месте, так что его можно увидеть и выбрать через меню Developer -> Add-Ins. Когда я открываю обычную книгу test.xlsm и нажимаю Alt + F11, я вижу, что код addin.xlam загружен.

Моя цель — добавить один пункт меню в строку меню Excel, чтобы пользователи могли запускать main из add-in.xlam. Перейдя по этой ссылке, мой код в addin.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 из addin.xlam, он также виден в test.xlsm. Но я не вижу никаких изменений в строке меню.

Кто-нибудь знает, что происходит?


person SoftTimur    schedule 27.07.2012    source источник


Ответы (2)


События AddinInstall и AddinUninstall запускаются только тогда, когда надстройка «установлена» или «удалена» с помощью диспетчера надстроек Excel.

ИМХО, это может привести к проблемам, поэтому я всегда рекомендую вместо этого использовать события Workbook_Open и Workbook_BeforeClose.

person Charles Williams    schedule 27.07.2012
comment
Согласованный. Я тоже использую этот метод. - person Siddharth Rout; 27.07.2012

Чарльз прав, вам нужно заменить Workbook_AddinInstall() на Workbook_Open(), а Workbook_AddinUninstall() на Workbook_BeforeClose().

кроме того, вам нужно CommandBarButton, а не CommandBarButtonPrivate.

удачи!

person peng W.    schedule 23.03.2014