Пошаговое руководство. Вызов кода из 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
В меню Проект выберите команду Добавить класс.
В диалоговом окне Добавить новый элемент измените имя нового класса на AddInUtilities и нажмите кнопку Добавить.
Файл AddInUtilities.cs или AddInUtilities.vb открывается в "Редакторе кода".
Добавьте следующие операторы в начало файла.
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;
Замените класс 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, выполните следующее.
В обозревателе решений разверните Excel.
Правой кнопкой мыши нажмите файл ThisAddIn.cs или ThisAddIn.vb и в меню выберите функцию Просмотреть код.
Добавьте в класс 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; }
В меню Построение выберите Построить решение.
Убедитесь в том, что проект строится без ошибок.
Проверка надстройки
Можно выполнить вызов класса AddInUtilities из следующих различных типов решений Office.В руководстве мы будем использовать код VBA в книге Excel.Дополнительные сведения о других типах решений Office, которые можно использовать, см. в разделе Вызов кода в надстройках уровня приложения из других решений Office.
Проверка надстройки
Нажмите клавишу F5 для запуска проекта.
В Excel сохраните активную книгу в формате книги Excel с включенными макросами (*.xlsm).Выберите удобное место для сохранения, например рабочий стол.
В ленте щелкните вкладку Разработчик.
Примечание
Если вкладка Разработчик не отображается в ленте, то ее следует сначала отобразить.Дополнительные сведения см. в разделе Практическое руководство. Отображение вкладки разработчика на ленте.
В группе Код выберите пункт Visual Basic.
Отобразится редактор Visual Basic.
В окне Проект дважды нажмите ThisWorkbook.
Откроется файл кода для объекта ThisWorkbook.
Добавьте следующий код 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
Нажмите клавишу F5.
Удостоверьтесь в том, что новый лист Imported Data был добавлен к книге.Также убедитесь в том, что ячейка A1 содержит строку Это мои данные.
Закройте приложение Excel.
Следующие действия
Дополнительные сведения о программировании настроек можно просмотреть в перечисленных ниже разделах:
Используйте класс ThisAddIn для автоматизации ведущего приложения и выполнения различных задач в проектах настроек.Дополнительные сведения см. в разделе Программирование надстроек уровня приложения.
Создайте настраиваемую область задач в надстройке.Дополнительные сведения см. в разделах Настраиваемые области задач и Практическое руководство. Добавление настраиваемой панели задач в приложение.
Настройте ленту в надстройке.Дополнительные сведения см. в разделах Обзор ленты и Практическое руководство. Работа с настройкой ленты.
См. также
Задачи
Практическое руководство. Создание проектов Office в Visual Studio
Основные понятия
Вызов кода в надстройках уровня приложения из других решений Office
Архитектура надстроек уровня приложения
Настройка функций пользовательского интерфейса с помощью интерфейсов расширяемости