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


Пошаговое руководство. Вызов кода надстройки VSTO из VBA

В этом пошаговом руководстве показано, как предоставить объект в надстройке VSTO другим решениям Microsoft Office, включая Visual Basic для приложений (VBA) и надстроек VSTO COM.

Область применения. Сведения в этом разделе относятся к проектам надстроек VSTO. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

Хотя в этом пошаговом руководстве используется Excel, рассмотренная процедура применима к любому шаблону проекта надстройки VSTO, которые предоставляет Visual Studio.

В этом пошаговом руководстве рассматриваются следующие задачи:

  • Определение класса, который может быть предоставлен другим решениям Office.

  • Предоставление класса другим решениям Office.

  • Вызов метода класса из кода VBA.

    Примечание.

    Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

Создание проекта надстройки VSTO

Первым шагом является создание проекта надстройки VSTO для Excel.

Создание проекта

  1. Создайте проект надстройки VSTO для Excel с именем ExcelImportDataс помощью шаблона проекта надстройки VSTO для Excel. Дополнительные сведения см. в разделе How to: Create Office Projects in Visual Studio.

    Visual Studio открывает файл кода ThisAddIn.cs или ThisAddIn.vb и добавляет проект ExcelImportData в Обозреватель решений.

Определение класса, который можно предоставить другим решениям Office

В этом пошаговом руководстве описывается вызов метода ImportData класса с именем AddInUtilities в надстройке VSTO из кода VBA. Этот метод записывает строку в ячейку A1 активного листа.

Для предоставления класса AddInUtilities другим решениям Office необходимо сделать класс общедоступным и видимым для COM. Необходимо также предоставить интерфейс IDispatch в классе. Код в следующей процедуре демонстрирует один из способов выполнения этих требований. Для получения дополнительной информации см. Calling Code in VSTO Add-ins from Other Office Solutions.

Определение класса, который можно предоставить другим решениям Office

  1. В меню Проект выберите пункт Добавить класс.

  2. В диалоговом окне Добавить новый элемент измените имя нового класса на AddInUtilitiesи нажмите кнопку Добавить.

    В редакторе кода откроется файл AddInUtilities.cs или AddInUtilities.vb .

  3. Добавьте следующие директивы в начало файла.

    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. Замените класс AddInUtilities на следующий код.

    [ComVisible(true)]
    public interface IAddInUtilities
    {
        void ImportData();
    }
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        // This method tries to write a string to cell A1 in the active worksheet.
        public void ImportData()
        {
            Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
    
            if (activeWorksheet != null)
            {
                Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
                range1.Value2 = "This is my data";
            }
        }
    }
    

    Этот код делает класс AddInUtilities видимым для COM, а также добавляет метод ImportData в класс. Для предоставления интерфейса IDispatch класс AddInUtilities также содержит атрибут ClassInterfaceAttribute , который реализует интерфейс, видимый для COM.

Предоставление класса другим решениям Office

Для предоставления класса AddInUtilities другим решениям Office переопределите метод RequestComAddInAutomationService в классе ThisAddIn . В переопределении верните экземпляр класса AddInUtilities .

Предоставление класса AddInUtilities другим решениям Office

  1. В обозревателе решенийразверните Excel.

  2. Щелкните правой кнопкой мыши ThisAddIn.cs или ThisAddIn.vb, а затем выберите пункт Просмотреть код.

  3. Добавьте в класс ThisAddIn приведенный далее код.

    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. В меню Сборка выберите Построить решение.

    Убедитесь, что сборка решения выполняется без ошибок.

Тестирование надстройки VSTO

Класс AddInUtilities можно вызывать из решений Office различного типа. В этом пошаговом руководстве будет использоваться код VBA в книге Excel. Дополнительные сведения о других типах решений Office, которые можно также использовать, см. в разделе "Код вызова" в надстройках VSTO из других решений Office.

Для тестирования надстройки VSTO выполните следующие действия.

  1. Нажмите клавишу F5 для запуска проекта.

  2. В Excel сохраните активную книгу как книгу Excel с поддержкой макросов (*.xlsm). Сохраните ее в удобном месте, например на рабочем столе.

  3. На ленте перейдите на вкладку Разработчик .

    Примечание.

    Если вкладка Разработчик не отображается, сделайте ее видимой. Дополнительные сведения см. в разделе "Практическое руководство. Отображение вкладки разработчика на ленте".

  4. В группе Код щелкните Visual Basic.

    Открывается редактор Visual Basic.

  5. В окне Проект дважды щелкните ThisWorkbook.

    Открывается файл кода для объекта ThisWorkbook .

  6. Добавьте следующий код VBA в файл кода. Этот код сначала получает объект COMAddIn, представляющий надстройку VSTO ExcelImportData . Затем код использует свойство Object объекта COMAddIn для вызова ImportData метода.

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. Нажмите клавишу F5.

  8. Убедитесь, что новый лист Imported Data (Импортированные данные) добавлен в книгу. Также убедитесь, что ячейка A1 содержит строку This is my data(Это мои данные).

  9. Выйдите из Excel.

Следующие шаги

Дополнительные сведения о программировании надстроек VSTO см. в следующих статьях: