Как создать рабочую книгу определенный Excel Add в

Я хотел бы создать Excel Add, на котором создает некоторые дополнительные панели инструментов и Кнопки меню. Но я хочу, чтобы это дополнение загрузилось только, когда определенная рабочая книга открыта. Я не хочу загружать Дополнение, если anyother рабочая книга открыта.

Я хотел бы знать то, что является возможными способами решить эту проблему и что является лучшим подходом для реализации, это Включает (XLA или VSTO или COM-надстройка).

Я не хочу, чтобы пользователь знал мой Дополнительный путь, код VbA, требуемый загрузить/Инициализировать дополнение.

5
задан Community 9 July 2018 в 18:41
поделиться

3 ответа

Звучит как хороший случай для проекта документа VSTO; В отличие от надстроек, которые расширяют все приложение и как таковые применяются к любому открытому документу, проект документа VSTO представляет собой настройку определенного документа, к которому прикреплен дополнительный код.

8
ответ дан 18 December 2019 в 11:53
поделиться

Если вы действительно хотите, чтобы аддин загружался только при открытии определенной рабочей книги, почему бы не загрузить его в событие Open соответствующей рабочей книги

' code in the ThisWorkbook module

Private Sub Workbook_Open()

Dim wb As Workbook

    On Error Resume Next
    Set wb = Workbooks("myAddin.xla")
    If wb Is Nothing Then
        Set wb = Application.Workbooks.Open("c:\path\myAddin.xls")
    End If

End Sub

В качестве альтернативы, любая другая рабочая книга или аддин могут включать код для перехвата событий уровня приложения Excel, таких как Workbook.Open, и если имя вновь открытой работы является тем, которое вас интересует, делать что угодно, то есть загружать аддин

2
ответ дан 18 December 2019 в 11:53
поделиться

Создайте панель инструментов в начале, но установите для ее видимости значение false. Захватите открываемую книгу с помощью обработчика событий для события AddIn.Application.WorkbookOpen и определите, является ли книга той, которую вы хотите. На этом этапе вы можете установить видимость панели инструментов.

Вы также можете перехватить событие AddIn.Application.WorkbookActivate и снова скрыть панель инструментов, если активная книга не является конкретной книгой.

Не забудьте объявить переменную-член на уровне ThisAddIn, чтобы сохранить ссылку на панель инструментов!

5
ответ дан 18 December 2019 в 11:53
поделиться