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


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

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

Применение

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

Тип проекта

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

Версия Microsoft Office

  • Выпуск 2007 системы 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

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

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

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

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

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

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

  4. Примените атрибуты ComVisibleAttribute и ClassInterfaceAttribute к классу, доступ к которому открывается для VBA. Эти атрибуты делают класс видимым для COM без создания интерфейса класса:

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. Переопределите метод GetAutomationObject класса ведущего элемента проекта, чтобы получить экземпляр класса, доступ к которому предоставляется VBA.

    • Если VBA предоставляется доступ к классу ведущего элемента, следует переопределить метод GetAutomationObject, принадлежащий данному классу, и получить текущий экземпляр класса:

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Если VBA предоставляется доступ к классу, не являющемуся ведущим элементом, следует переопределить метод GetAutomationObject любого ведущего элемента проекта и получить экземпляр класса элемента, не являющегося ведущим. Например, следующий образец предполагает, что VBA предоставляется доступ к классу DocumentUtilities:

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

    Дополнительные сведения о ведущих элементах см. в разделе Общие сведения о ведущих элементах и элементах управления ведущего приложения.

  6. Извлеките интерфейс из класса, доступ к которому предоставляется VBA. В диалоговом окне Извлечение интерфейса выберите открытые элементы, которые необходимо включить в объявление интерфейса. Дополнительные сведения см. в разделе Практическое руководство. Оптимизация кода с помощью операции "извлечение интерфейса".

  7. Добавьте в объявление интерфейса ключевое слово public.

  8. Сделайте интерфейс видимым для COM, добавив следующий атрибут ComVisibleAttribute в интерфейс:

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Откройте документ (для Word) или рабочий лист (для Excel) в конструкторе Visual Studio.

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

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

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

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

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

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

См. также

Задачи

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

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

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

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

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

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

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