Как создать рабочую книгу конкретного Excel Добавить в - PullRequest
5 голосов
/ 17 июня 2010

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

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

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

Ответы [ 3 ]

7 голосов
/ 17 июня 2010

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

4 голосов
/ 19 июня 2010

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

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

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

2 голосов
/ 19 июня 2010

Если вы действительно хотите, чтобы надстройка загружалась только при открытии определенной рабочей книги, почему бы не загрузить ее в событие 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, и если имя вновь открытой работы является тем, в котором вы заинтересованы, то делайте что угодно, т.е. загружайте надстройку

...