Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual Basic
Обновлен: Ноябрь 2007
Применимость |
---|
Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
В проекте Visual Basic можно предоставить доступ к коду со стороны кода VBA, если необходимо обеспечить взаимодействие двух типов кода.
Этот процесс для Visual Basic отличается от процесса для Visual C#. Дополнительные сведения см. в разделах Вызов кода настроек уровня документа из VBA и Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual C#.
Процесс для кода в классе ведущего элемента отличается от процесса для кода в других классах:
Предоставление доступа к коду в классе ведущего элемента
Предоставление доступа к коду в классе, не являющемся классом ведущего элемента
Предоставление доступа к коду в классе ведущего элемента
Чтобы разрешить вызов кода в классе ведущего элемента Visual Basic из кода VBA, установите для свойства EnableVbaCallers ведущего элемента значение True.
В разделе Пошаговое руководство. Вызов кода из VBA в проекте Visual Basic представлено пошаговое руководство по предоставлению доступа к методу класса ведущего элемента и его последующему вызову из кода VBA. Дополнительные сведения о ведущих элементах см. в разделе Общие сведения о ведущих элементах и элементах управления ведущего приложения.
Предоставление доступа к коду ведущего элемента из кода VBA
Откройте или создайте проект уровня документа Visual Basic, основанный на документе Word, рабочей книге Excel или шаблоне Excel, поддерживающем макросы и уже содержащем код VBA.
Дополнительные сведения о форматах файлов документов, поддерживающих макросы, см. в разделе Вызов кода настроек уровня документа из VBA.
Примечание. Эту функцию нельзя использовать в проектах шаблонов Word.
Убедитесь в том, что выполнение кода VBA в документе разрешено без вывода пользователю сообщения о необходимости включения макросов. Чтобы предоставить коду VBA доверие и разрешить его выполнение, добавьте расположение проекта Visual Studio Tools for Office в список надежных расположений в параметрах центра управления безопасностью для Word или Excel.
Добавьте свойство, метод или событие, к которым необходимо предоставить доступ из кода VBA, в один из классов ведущего элемента проекта и объявите новый элемент с помощью модификатора Public. Имя класса зависит от приложения:
в проектах Word классу ведущего элемента по умолчанию присваивается имя ThisDocument;
в проектах Excel классам ведущего элемента по умолчанию присваиваются имена ThisWorkbook, Sheet1, Sheet2 и Sheet3.
Для свойства EnableVbaCallers ведущего элемента установите значение True. Это свойство доступно в окне Свойства для открытого в конструкторе ведущего элемента.
После установки этого свойства в Visual Studio Tools for Office свойству ReferenceAssemblyFromVbaProject автоматически присваивается значение True. Дополнительные сведения об этом свойстве см. в разделе Вызов кода настроек уровня документа из VBA.
Примечание. Если книга или документ не содержат кода VBA, или код VBA в документе не имеет доверия для выполнения, при присваивании свойству EnableVbaCallers значения True отображается сообщение об ошибке. Это связано с тем, что в этом случае в Visual Studio Tools for Office не поддерживается изменение проекта VBA в документе.
В появившемся окне сообщения нажмите кнопку ОК. В этом сообщении содержится уведомление о том, что при добавлении кода VBA в книгу или документ во время выполнения проекта в среде Visual Studio этот код будет потерян при следующем построении проекта. Это происходит потому, что документ в выходной папке сборки перезаписывается при каждом построении проекта.
На данном этапе в Visual Studio Tools for Office выполняется настройка, обеспечивающая возможность обращения к сборке из кода VBA. Также в Visual Studio Tools for Office добавляется свойство CallVSTOAssembly к модулям ThisDocument, ThisWorkbook, Sheet1, Sheet2 или Sheet3 проекта VBA. Это свойство можно использовать для обращения к открытым элементам класса, к которому предоставляется доступ из кода VBA. Дополнительные сведения см. в разделе Вызов кода настроек уровня документа из VBA.
Выполните построение проекта.
Предоставление доступа к коду в классе, не являющемся классом ведущего элемента
Чтобы разрешить вызов кода Visual Basic в классе, не являющемся классом ведущего элемента, из кода VBA, измените код таким образом, чтобы он был видим из кода VBA.
Предоставление доступа к коду в классе, не являющемся классом ведущего элемента, из кода VBA
Откройте или создайте проект уровня документа Visual Basic, основанный на документе Word, рабочей книге Excel или шаблоне Excel, поддерживающем макросы и уже содержащем код VBA.
Дополнительные сведения о форматах файлов документов, поддерживающих макросы, см. в разделе Вызов кода настроек уровня документа из VBA.
Примечание. Эту функцию нельзя использовать в проектах шаблонов Word.
Убедитесь в том, что выполнение кода VBA в документе разрешено без вывода пользователю сообщения о необходимости включения макросов. Чтобы предоставить коду VBA доверие и разрешить его выполнение, добавьте расположение проекта Visual Studio Tools for Office в список надежных расположений в параметрах центра управления безопасностью для Word или Excel.
Добавьте элемент, доступ к которому необходимо открыть для VBA, в открытый класс проекта и объявите новый элемент как public.
Примените атрибуты ComVisibleAttribute и ComClassAttribute к классу, доступ к которому открывается для VBA. Эти атрибуты обеспечивают видимость класса для кода VBA.
<Microsoft.VisualBasic.ComClass()> _ <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Переопределите метод GetAutomationObject класса ведущего элемента проекта, чтобы получить экземпляр класса, к которому предоставляется доступ из кода VBA. В следующем примере коду VBA предоставляется доступ к классу DocumentUtilities.
Protected Overrides Function GetAutomationObject() As Object Return New DocumentUtilities() End Function
Откройте документ (для 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. Дополнительные сведения см. в разделе Вызов кода настроек уровня документа из VBA.
Выполните построение проекта.
См. также
Задачи
Практическое руководство. Создание проектов Visual Studio Tools for Office
Пошаговое руководство. Вызов кода из VBA в проекте Visual Basic
Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual C#
Основные понятия
Создание решений Office в Visual Studio