Пошаговое руководство. Вызов кода из VBA в проекте Visual C#
Обновлен: Ноябрь 2007
Применение |
---|
Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
В данном пошаговом руководстве описывается процесс вызова метода в настройках уровня документа из кода VBA книги для Microsoft Office Excel 2007. Данная процедура состоит из трех основных этапов: добавления метода к классу ведущего элемента Sheet1, представления метода коду VBA в книге и вызова метода из кода VBA в книге.
Несмотря на то, что пошаговое руководство предназначено исключительно для Excel, некоторые рассмотренные понятия также применяются к проектам уровня документа для Microsoft Office Word 2007.
В данном пошаговом руководстве демонстрируются следующие задачи.
Создание книги, содержащей код VBA.
Предоставление доверия на размещение книги с помощью центра управления безопасностью в Excel.
Добавление метода к классу ведущего элемента Sheet1.
Извлечение интерфейса для класса ведущего элемента Sheet1.
Представление метода коду VBA.
Вызов метода из кода VBA.
Примечание. |
---|
На компьютере могут отображаться имена или расположения некоторых элементов пользовательского интерфейса Visual Studio, отличающиеся от указанных в дальнейших инструкциях. Эти элементы определяются используемой версией Visual Studio и ее параметрами. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Обязательные компоненты
Для выполнения инструкций данного пошагового руководства необходимы следующие компоненты:
Visual Studio Tools for Office (необязательный компонент Visual Studio 2008 Professional и Visual Studio Team System).
Microsoft Office Excel 2007.
Visual Studio Tools for Office устанавливается по умолчанию с перечисленными версиями Visual Studio. Чтобы проверить, установлен ли данный набор средств, см. раздел Установка средств Visual Studio для Office.
Создание книги, содержащей код VBA
Первый этап предполагает создание книги с включенными макросами, содержащей простой макрос VBA. Прежде чем представить код в настройке VBA, необходимо включить код в книгу. В противном случае Visual Studio Tools for Office не сможет изменить проект VBA, чтобы активировать код VBA с целью вызова сборки Visual Studio Tools for Office.
Если книга, содержащая код VBA, уже используется, этот этап можно пропустить.
Чтобы создать книгу, содержащую код VBA, выполните следующее.
Запустите Excel 2007.
Сохраните активный документ как книгу Excel с включенным макросом (*.xlsm) под именем WorkbookWithVBA. Выберите удобное место для сохранения, например рабочий стол.
В ленте щелкните вкладку Разработчик.
Примечание. Если вкладка Разработчик не отображается на ленте, то ее следует отобразить вручную. Дополнительные сведения см. в разделе Практическое руководство. Отображение вкладки разработчика на ленте.
В группе Код выберите пункт Visual Basic.
Отобразится редактор Visual Basic.
В окне Проект дважды нажмите ThisWorkbook.
Открывается файл кода для объекта ThisWorkbook.
Добавьте в файл кода представленный ниже код VBA. Код содержит простые функции, не выполняющие никаких действий. Единственной задачей функции является подтверждение наличия проекта VBA в книге. Это необходимо для выполнения следующих этапов пошагового руководства.
Sub EmptySub() End Sub
Сохраните документ и закройте Word.
Создание проекта
Теперь можно создавать проект на уровне документа в системе Excel 2007. Работа проекта осуществляется на основе созданной ранее книги с включенными макросами.
Чтобы создать новый проект, выполните следующее.
Запустите Visual Studio.
В меню Файл выберите пункт Создать и нажмите Проект.
В панели Типы проектов откройте раздел Visual C# и выберите Office.
Выберите папку 2007.
Затем в панели Шаблоны выберите проект Книга Excel.
В диалоговом окне Имя введите CallingCodeFromVBA.
Нажмите кнопку OK.
Откроется вкладка Мастер проектов набора инструментов Visual Studio для Office.
Выберите команду Копировать текущий документ. В окне Полный путь к текущему документу укажите расположение ранее созданной книги с именем WorkbookWithVBA. Если используется созданная книга с макросами, необходимо указать путь к данной книге.
Нажмите кнопку Готово.
Visual Studio откроет в конструкторе книгу под именем WorkbookWithVBA и добавит проект CallingCodeFromVBA в раздел Обозреватель решений.
Определение расположения книги
Перед представлением кода в решении коду VBA в книге предоставьте доверие на запуск VBA в книге. Это можно сделать следующими способами. Данное пошаговое руководство поэтапно рассматривает размещение документа в книге с помощью центра управления безопасностью в Excel.
Для определения расположения книги выполните следующее.
Запустите Excel.
Нажмите кнопку Microsoft Office.
Нажмите кнопку Параметры Excel.
В области категорий нажмите Центр управления безопасностью.
В панели "Детали" нажмите Параметры центра управления безопасностью.
В панели "Категории" нажмите Надежные расположения.
В панели "Детали" нажмите Добавить новые расположения.
В диалоговом окне Надежные расположения Microsoft Office откройте папку с проектом CallingCodeFromVBA.
Выберите Вложенные папки с надежными расположениями.
В диалоговом окне Надежные расположения Microsoft Office нажмите кнопку OK.
В диалоговом окне Центр управления безопасностью нажмите кнопку ОК.
В диалоговом окне Параметры Excel нажмите кнопку ОК.
Закройте Excel.
Добавление метода к классу Sheet1.
Теперь, когда проект VBA установлен, добавьте открытый метод Sheet1 к классу ведущего элемента, полученному из кода VBA.
Для того чтобы добавить метод к классу Sheet1, выполните следующие действия.
В обозревателе решений щелкните правой кнопкой мыши файл Sheet1.cs и выберите пункт Перейти к коду.
В редакторе кода откроется файл Sheet1.cs.
Добавьте в класс Sheet1 следующий код. Метод CreateVstoNamedRange создает новый объект NamedRange в указанном диапазоне. В ходе выполнения данного метода, также создается обработчик событий для SelectedNamedRange. Позже в данном пошаговом руководстве мы рассмотрим процесс вызова метода CreateVstoNamedRange из кода VBA в документе.
private Microsoft.Office.Tools.Excel.NamedRange namedRange1; public void CreateVstoNamedRange(Excel.Range range, string name) { if (!this.Controls.Contains(name)) { namedRange1 = this.Controls.AddNamedRange(range, name); namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler( namedRange1_Selected); } else { MessageBox.Show("A named range with this specific name " + "already exists on the worksheet."); } } private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target) { MessageBox.Show("This named range was created by Visual Studio " + "Tools for Office."); }
Добавьте следующий метод в класс Sheet1. Данный метод заменяет метод GetAutomationObject для возврата к текущему примеру класса Sheet1.
protected override object GetAutomationObject() { return this; }
Перечисленные далее атрибуты необходимо применять до первой строки объявления класса Sheet1. Эти атрибуты делают класс видимым для COM без создания интерфейса класса:
[System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)]
Извлечение интерфейса для класса Sheet1.
Перед преобразованием метода CreateVstoNamedRange в код VBA необходимо создать открытый интерфейс, определяющий данный метод; этот интерфейс необходимо представить СОМ.
Чтобы извлечь интерфейс для класса Sheet1, выполните следующее.
В файле кода Sheet1.cs щелкните на любой области класса Sheet1.
В меню Рефакторинг выберите пункт Извлечение интерфейса.
Откройте окно Выбор открытых членов для формирования интерфейса и в диалоговом окне Извлечение интерфейса щелкните на записи для метода CreateVstoNamedRange.
Нажмите кнопку OK.
Visual Studio создает новый интерфейс под именем ISheet1 и изменяет определение класса Sheet1 таким образом, чтобы производилась реализация интерфейса ISheet1. Visual Studio открывает файл ISheet1.cs в редакторе кода.
В файле ISheet1.cs замените объявление интерфейса ISheet1 следующим кодом. Данный код делает интерфейс ISheet1 открытым. Применение атрибута ComVisibleAttribute позволяет сделать интерфейс видимым из COM.
[System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); }
Постройте проект.
Преобразование метода в код VBA
Для того чтобы преобразовывать метод CreateVstoNamedRange в код VBA в книге, для ведущего элемента Sheet1 в свойстве ReferenceAssemblyFromVbaProject установите значение True.
Чтобы преобразовывать метод в код VBA, выполните следующие действия.
В пункте Преобразователь решений дважды щелкните на Sheet1.cs.
В конструкторе откроется файл WorkbookWithVBA с отображенным элементом Sheet1.
В окне Свойства выберите свойство ReferenceAssemblyFromVbaProject и измените его значение на True.
В появившимся окне с сообщением нажмите кнопку ОК.
Постройте проект.
Вызов метода из кода VBA
Теперь можно вызвать метод CreateVstoNamedRange из кода VBA в книге.
Примечание. |
---|
В данном руководстве мы рассмотрим добавление кода VBA в книгу во время откладки проекта. Любой добавляемый в этот документ код VBA перезаписывается во время следующего построения проекта, поскольку Visual Studio заменяет документ в выходной папке построения копией документа из главной папки проекта. Для того чтобы сохранить код VBA, скопируйте документ в папку проекта. Дополнительные сведения см. в разделе Вызов кода настроек уровня документа из VBA. |
Для вызова метода из кода VBA выполните следующее.
Нажмите клавишу F5 для запуска проекта.
На вкладке Разработчик в группе Код нажмите кнопку Visual Basic.
Откроется редактор Visual Basic.
В меню Вставка выберите пункт Модуль.
Добавьте в новый модуль следующий код.
Этот код вызывает метод CreateTable в сборке Visual Studio Tools for Office. Макрос получает доступ к данному методу, используя глобальный метод GetManagedClass для доступа к классу ведущего элемента Sheet1, преобразованного в код VBA. Метод GetManagedClass автоматически создается во время задания свойства ReferenceAssemblyFromVbaProject в одном из предыдущих шагов этого руководства.
Sub CallVSTOMethod() Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1 Set VSTOSheet1 = GetManagedClass(Sheet1) Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange") End Sub
Нажмите клавишу F5.
Открывается книга. В Листе1 нажмите ячейку A1. Проверьте, появилось ли окно сообщения.
Закройте Excel без сохранения изменений.
Следующие действия
Дополнительные сведения о вызове кода из VBA в решениях Visual Studio Tools for Office см. в следующих разделах.
Вызов кода из VBA в ведущем элементе в настройках Visual Basic. Процесс вызова отличается от процесса вызова в Visual C#. Дополнительные сведения см. в разделе Пошаговое руководство. Вызов кода из VBA в проекте Visual Basic.
Вызов кода из VBA в надстройках на уровне приложения. Дополнительные сведения см. в разделе Пошаговое руководство. Вызов кода из VBA в настройках на уровне приложения.
См. также
Задачи
Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual Basic
Практическое руководство. Предоставление доступа к коду со стороны VBA в проекте Visual C#
Пошаговое руководство. Вызов кода из VBA в проекте Visual Basic