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


Пошаговое руководство. Вызов кода из VBA в настройках на уровне приложения

В пошаговом руководстве рассматривается метод использование объекта в настройках на уровне приложения в других решениях Microsoft Office, а в также в настройках VBA и COM.

Применение. Сведения этого раздела применяются к проектам уровня приложения для Microsoft Office 2013 Preview и Microsoft Office 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.

Несмотря на то, что данное руководство ориентировано на Excel, рассматриваемые подходы применимы ко всем шаблонам проектов надстроек, предоставляемых средой Visual Studio.

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

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

  • Использование класса с другими решениями Office.

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

ПримечаниеПримечание

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

Обязательные компоненты

Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.

-

Выпуск Visual Studio 2012, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в разделе [Настройка компьютера для разработки решений Office](bb398242\(v=vs.110\).md).
  • Excel 2013 или Excel 2010.

ссылка на видео Для просмотра видеоверсии этого раздела перейдите по ссылке Video How to: Calling Code in an Application-Level Add-in from VBA.

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

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

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

  • Создайте проект надстройки Excel с именем ExcelImportData, используя шаблон проекта надстройки Excel.Дополнительные сведения см. в разделе Практическое руководство. Создание проектов Office в Visual Studio.

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

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

Задача данного руководства рассмотреть вызов ImportData метода класса AddInUtilities из кода VBA в настройках.Этот метод записывает строку в ячейку A1 активного рабочего листа.

Для того чтобы использовать класс AddInUtilities с другими решениями Office, необходимо опубликовать класс и отобразить в COM.Необходимо также предоставить доступ к интерфейсу IDispatch этого класса.Следующая процедура показывает односторонний код, который позволяет выполнить указанные требования.Дополнительные сведения см. в разделе Вызов кода в надстройках уровня приложения из других решений Office.

Для того чтобы определить класс, который используется с другими решениями Office

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

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

    Файл AddInUtilities.cs или AddInUtilities.vb открывается в "Редакторе кода".

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

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

    <ComVisible(True)> _
    Public Interface IAddInUtilities
        Sub ImportData()
    End Interface
    
    <ComVisible(True)> _
    <ClassInterface(ClassInterfaceType.None)> _
    Public Class AddInUtilities
        Implements IAddInUtilities
    
        ' This method tries to write a string to cell A1 in the active worksheet.
        Public Sub ImportData() Implements IAddInUtilities.ImportData
    
            Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
    
            If activeWorksheet IsNot Nothing Then
                Dim range1 As Excel.Range = activeWorksheet.Range("A1")
                range1.Value2 = "This is my data"
            End If
        End Sub
    End Class
    
    [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 utilities As AddInUtilities
    
    Protected Overrides Function RequestComAddInAutomationService() As Object
        If utilities Is Nothing Then
            utilities = New AddInUtilities()
        End If
        Return utilities
    End Function
    
    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. В меню Построение выберите Построить решение.

    Убедитесь в том, что проект строится без ошибок.

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

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

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

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

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

  3. В ленте щелкните вкладку Разработчик.

    ПримечаниеПримечание

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

  4. В группе Код выберите пункт Visual Basic.

    Отобразится редактор Visual Basic.

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

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

  6. Добавьте следующий код VBA в файл кода.Сначала код получает объект COMAddIn с настройками 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 содержит строку Это мои данные.

  9. Закройте приложение Excel.

Следующие действия

Дополнительные сведения о программировании настроек можно просмотреть в перечисленных ниже разделах:

См. также

Задачи

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

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

Вызов кода в надстройках уровня приложения из других решений Office

Архитектура надстроек уровня приложения

Настройка функций пользовательского интерфейса с помощью интерфейсов расширяемости

Другие ресурсы

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

Разработка решений Office