Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual C#
Обновлен: Ноябрь 2007
Применение |
---|
Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
В проекте Visual C# можно предоставить доступ к коду со стороны кода VBA, если необходимо обеспечить взаимодействие двух типов кода.
Процесс Visual C# отличается от процесса Visual Basic. Дополнительные сведения см. в разделах Вызов кода настроек уровня документа из VBA и Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual Basic.
Предоставление доступа к коду в проекте Visual C#
Чтобы предоставить коду VBA возможность обращаться к коду проекта Visual C#, необходимо изменить код так, чтобы он стал видимым для COM, а затем в конструкторе присвоить свойству ReferenceAssemblyFromVbaProject значение True.
В разделе Пошаговое руководство. Вызов кода из VBA в проекте Visual C# представлены инструкции, демонстрирующие способ вызова метода в проекте Visual C# из VBA.
Предоставление доступа к коду в проекте Visual C# со стороны VBA
Откройте или создайте проект уровня документа, основанный на документе Word, рабочей книге Excel или шаблоне Excel, поддерживающем макросы и уже содержащем код VBA.
Дополнительные сведения о форматах файлов документов, поддерживающих макросы, см. в разделе Вызов кода настроек уровня документа из VBA.
Примечание. Эту функцию нельзя использовать в проектах шаблонов Word.
Убедитесь в том, что выполнение кода VBA в документе разрешено без вывода пользователю сообщения о необходимости включения макросов. Чтобы предоставить коду VBA доверие и разрешить его выполнение, добавьте расположение проекта Visual Studio Tools for Office в список надежных расположений в параметрах центра управления безопасностью для Word или Excel.
Добавьте элемент, доступ к которому необходимо открыть для VBA, в открытый класс проекта и объявите новый элемент как public.
Примените атрибуты ComVisibleAttribute и ClassInterfaceAttribute к классу, доступ к которому открывается для VBA. Эти атрибуты делают класс видимым для COM без создания интерфейса класса:
[System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)]
Переопределите метод GetAutomationObject класса ведущего элемента проекта, чтобы получить экземпляр класса, доступ к которому предоставляется VBA.
Если VBA предоставляется доступ к классу ведущего элемента, следует переопределить метод GetAutomationObject, принадлежащий данному классу, и получить текущий экземпляр класса:
protected override object GetAutomationObject() { return this; }
Если VBA предоставляется доступ к классу, не являющемуся ведущим элементом, следует переопределить метод GetAutomationObject любого ведущего элемента проекта и получить экземпляр класса элемента, не являющегося ведущим. Например, следующий образец предполагает, что VBA предоставляется доступ к классу DocumentUtilities:
protected override object GetAutomationObject() { return new DocumentUtilities(); }
Дополнительные сведения о ведущих элементах см. в разделе Общие сведения о ведущих элементах и элементах управления ведущего приложения.
Извлеките интерфейс из класса, доступ к которому предоставляется VBA. В диалоговом окне Извлечение интерфейса выберите открытые элементы, которые необходимо включить в объявление интерфейса. Дополнительные сведения см. в разделе Практическое руководство. Оптимизация кода с помощью операции "извлечение интерфейса".
Добавьте в объявление интерфейса ключевое слово public.
Сделайте интерфейс видимым для COM, добавив следующий атрибут ComVisibleAttribute в интерфейс:
[System.Runtime.InteropServices.ComVisible(true)]
Откройте документ (для Word) или рабочий лист (для Excel) в конструкторе Visual Studio.
В окне Свойства выберите свойство ReferenceAssemblyFromVbaProject и измените значение на True.
Примечание. Если рабочая книга или документ не содержат кода VBA, или если код VBA в документе не имеет доверия для выполнения, при присвоении свойству ReferenceAssemblyFromVbaProject значения True будет выдано сообщение об ошибке. Это связано с тем, что в этом случае в Visual Studio Tools for Office не поддерживается изменение проекта VBA в документе.
В появившемся окне сообщения нажмите кнопку ОК. Это сообщение служит для напоминания о том, что если код VBA добавляется в рабочую книгу или документ при запуске проекта из Visual Studio, то он будет утерян при следующем построении проекта. Это происходит потому, что документ в выходной папке сборки перезаписывается каждый раз при построении проекта.
На данном этапе Visual Studio Tools for Office настраивает проект так, что проект VBA может обращаться к сборке. Visual Studio Tools for Office также добавляет в проект метод с именем GetManagedClass. Этот метод можно вызывать в любом месте проекта VBA для доступа к классу, открытому для VBA. Дополнительные сведения см. в разделе Вызов кода настроек уровня документа из VBA.
Выполните построение проекта.
См. также
Задачи
Практическое руководство. Создание проектов Visual Studio Tools for Office
Пошаговое руководство. Вызов кода из VBA в проекте Visual C#
Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual Basic
Основные понятия
Создание решений Office в Visual Studio