Поделиться через


Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual Basic

Обновлен: Ноябрь 2007

Применимость

Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office.

Тип проекта

  • Проекты уровня документа

Версия Microsoft Office

  • Выпуск 2007 системы Microsoft Office

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

В проекте Visual Basic можно предоставить доступ к коду со стороны кода VBA, если необходимо обеспечить взаимодействие двух типов кода.

Этот процесс для Visual Basic отличается от процесса для Visual C#. Дополнительные сведения см. в разделах Вызов кода настроек уровня документа из VBA и Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual C#.

Процесс для кода в классе ведущего элемента отличается от процесса для кода в других классах:

  • Предоставление доступа к коду в классе ведущего элемента

  • Предоставление доступа к коду в классе, не являющемся классом ведущего элемента

Предоставление доступа к коду в классе ведущего элемента

Чтобы разрешить вызов кода в классе ведущего элемента Visual Basic из кода VBA, установите для свойства EnableVbaCallers ведущего элемента значение True.

В разделе Пошаговое руководство. Вызов кода из VBA в проекте Visual Basic представлено пошаговое руководство по предоставлению доступа к методу класса ведущего элемента и его последующему вызову из кода VBA. Дополнительные сведения о ведущих элементах см. в разделе Общие сведения о ведущих элементах и элементах управления ведущего приложения.

Предоставление доступа к коду ведущего элемента из кода VBA

  1. Откройте или создайте проект уровня документа Visual Basic, основанный на документе Word, рабочей книге Excel или шаблоне Excel, поддерживающем макросы и уже содержащем код VBA. 

    Дополнительные сведения о форматах файлов документов, поддерживающих макросы, см. в разделе Вызов кода настроек уровня документа из VBA.

    Bb157883.alert_note(ru-ru,VS.90).gifПримечание.

    Эту функцию нельзя использовать в проектах шаблонов Word.

  2. Убедитесь в том, что выполнение кода VBA в документе разрешено без вывода пользователю сообщения о необходимости включения макросов. Чтобы предоставить коду VBA доверие и разрешить его выполнение, добавьте расположение проекта Visual Studio Tools for Office в список надежных расположений в параметрах центра управления безопасностью для Word или Excel.

  3. Добавьте свойство, метод или событие, к которым необходимо предоставить доступ из кода VBA, в один из классов ведущего элемента проекта и объявите новый элемент с помощью модификатора Public. Имя класса зависит от приложения:

    • в проектах Word классу ведущего элемента по умолчанию присваивается имя ThisDocument;

    • в проектах Excel классам ведущего элемента по умолчанию присваиваются имена ThisWorkbook, Sheet1, Sheet2 и Sheet3.

  4. Для свойства EnableVbaCallers ведущего элемента установите значение True. Это свойство доступно в окне Свойства для открытого в конструкторе ведущего элемента.

    После установки этого свойства в Visual Studio Tools for Office свойству ReferenceAssemblyFromVbaProject автоматически присваивается значение True. Дополнительные сведения об этом свойстве см. в разделе Вызов кода настроек уровня документа из VBA.

    Bb157883.alert_note(ru-ru,VS.90).gifПримечание.

    Если книга или документ не содержат кода VBA, или код VBA в документе не имеет доверия для выполнения, при присваивании свойству EnableVbaCallers значения True отображается сообщение об ошибке. Это связано с тем, что в этом случае в Visual Studio Tools for Office не поддерживается изменение проекта VBA в документе.

  5. В появившемся окне сообщения нажмите кнопку ОК. В этом сообщении содержится уведомление о том, что при добавлении кода VBA в книгу или документ во время выполнения проекта в среде Visual Studio этот код будет потерян при следующем построении проекта. Это происходит потому, что документ в выходной папке сборки перезаписывается при каждом построении проекта.

    На данном этапе в Visual Studio Tools for Office выполняется настройка, обеспечивающая возможность обращения к сборке из кода VBA. Также в Visual Studio Tools for Office добавляется свойство CallVSTOAssembly к модулям ThisDocument, ThisWorkbook, Sheet1, Sheet2 или Sheet3 проекта VBA. Это свойство можно использовать для обращения к открытым элементам класса, к которому предоставляется доступ из кода VBA. Дополнительные сведения см. в разделе Вызов кода настроек уровня документа из VBA.

  6. Выполните построение проекта.

Предоставление доступа к коду в классе, не являющемся классом ведущего элемента

Чтобы разрешить вызов кода Visual Basic в классе, не являющемся классом ведущего элемента, из кода VBA, измените код таким образом, чтобы он был видим из кода VBA.

Предоставление доступа к коду в классе, не являющемся классом ведущего элемента, из кода VBA

  1. Откройте или создайте проект уровня документа Visual Basic, основанный на документе Word, рабочей книге Excel или шаблоне Excel, поддерживающем макросы и уже содержащем код VBA.

    Дополнительные сведения о форматах файлов документов, поддерживающих макросы, см. в разделе Вызов кода настроек уровня документа из VBA.

    Bb157883.alert_note(ru-ru,VS.90).gifПримечание.

    Эту функцию нельзя использовать в проектах шаблонов Word.

  2. Убедитесь в том, что выполнение кода VBA в документе разрешено без вывода пользователю сообщения о необходимости включения макросов. Чтобы предоставить коду VBA доверие и разрешить его выполнение, добавьте расположение проекта Visual Studio Tools for Office в список надежных расположений в параметрах центра управления безопасностью для Word или Excel.

  3. Добавьте элемент, доступ к которому необходимо открыть для VBA, в открытый класс проекта и объявите новый элемент как public.

  4. Примените атрибуты ComVisibleAttribute и ComClassAttribute к классу, доступ к которому открывается для VBA. Эти атрибуты обеспечивают видимость класса для кода VBA.

    <Microsoft.VisualBasic.ComClass()> _
    <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
    
  5. Переопределите метод GetAutomationObject класса ведущего элемента проекта, чтобы получить экземпляр класса, к которому предоставляется доступ из кода VBA. В следующем примере коду VBA предоставляется доступ к классу DocumentUtilities.

    Protected Overrides Function GetAutomationObject() As Object
        Return New DocumentUtilities()
    End Function
    
  6. Откройте документ (для Word) или лист (для Excel) в конструкторе Visual Studio.

  7. В окне Свойства выберите свойство ReferenceAssemblyFromVbaProject и измените его значение на True.

    Bb157883.alert_note(ru-ru,VS.90).gifПримечание.

    Если книга или документ не содержат кода VBA, или код VBA в документе не имеет доверия для выполнения, при присваивании свойству ReferenceAssemblyFromVbaProject значения True отображается сообщение об ошибке. Это связано с тем, что в этом случае в Visual Studio Tools for Office не поддерживается изменение проекта VBA в документе.

  8. В появившемся окне сообщения нажмите кнопку ОК. В этом сообщении содержится уведомление о том, что при добавлении кода VBA в книгу или документ во время выполнения проекта в среде Visual Studio этот код будет потерян при следующем построении проекта. Это происходит потому, что документ в выходной папке сборки перезаписывается при каждом построении проекта.

    На данном этапе в Visual Studio Tools for Office выполняется настройка, обеспечивающая возможность обращения к сборке из кода VBA. Также в Visual Studio Tools for Office добавляется метод GetManagedClass в проект VBA. Этот метод можно вызывать в любом месте проекта VBA для доступа к классу, открытому для VBA. Дополнительные сведения см. в разделе Вызов кода настроек уровня документа из VBA.

  9. Выполните построение проекта.

См. также

Задачи

Практическое руководство. Создание проектов Visual Studio Tools for Office

Пошаговое руководство. Вызов кода из VBA в проекте Visual Basic

Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual C#

Основные понятия

Создание решений Office в Visual Studio

Объединение настроек VBA и настроек на уровне документа

Вызов кода настроек уровня документа из VBA