Динамическое добавление и запуск макроса VBA из Visual Basic
При автоматизации Office продукта из Visual Basic может быть полезно переместить часть кода в модуль Microsoft Visual Basic для приложений (VBA), который может запускаться в пространстве процессов сервера. Это может повысить общую скорость выполнения приложения и решить проблемы, если сервер выполняет действие только при выполнении вызова.
В этой статье показано, как динамически добавить модуль VBA в запущенное приложение Office из Visual Basic, а затем вызвать макрос для заполнения активного электронного таблицы.
Дополнительная информация
В следующем примере показано, как вставить модуль кода в Microsoft Excel, но для Word и PowerPoint можно использовать один и тот же модуль VBA.
В образце используется статический текстовый файл для модуля кода, вставленного в Excel. Возможно, вы захотите, чтобы он был перемещен в файл ресурсов, который можно компилировать в приложении, а затем извлечь его во временный файл при необходимости во время запуска. Это сделает проект более управляемым для повторного распространения.
Начиная с Microsoft Office XP, пользователь должен предоставить доступ к объектной модели VBA, чтобы любой код автоматизации, написанный для управления VBA, работал. Это новая функция безопасности с Office XP. Дополнительные сведения см. в следующей статье базы знаний:
282830 Программный доступ к Office XP VBA Project отклонен
Шаги по построению примера
- Сначала создайте новый текстовый файл с именем KbTest.bas (без .txt расширения). Это модуль кода, который мы вставляем в Excel во время запуска.
- В текстовом файле добавьте следующие строки кода:
Attribute VB_Name = «KbTest»
‘ Your Microsoft Visual Basic for Applications macro function takes 1
‘ parameter, the sheet object that you are going to fill.
Public Sub DoKbTest(oSheetToFill As Object)
Dim i As Integer, j As Integer
Dim sMsg As String
For i = 1 To 100
For j = 1 To 10
sMsg = «Cell(» & Str(i) & «,» & Str(j) & «)»
oSheetToFill.Cells(i, j).Value = sMsg
Next j
Next i
End Sub
- В Microsoft Office Excel 2007 выберите библиотеку 12.0.
- В Microsoft Office Excel 2003 выберите библиотеку 11.0.
- В Microsoft Excel 2002 выберите библиотеку 10.0.
- В Microsoft Excel 2000 выберите библиотеку 9.0.
- Для Microsoft Excel 97 выберите библиотеку 8.0.
Private Sub Command1_Click()
Dim oXL As Excel.Application
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim i As Integer, j As Integer
Dim sMsg As String
‘ Create a new instance of Excel and make it visible.
Set oXL = CreateObject(«Excel.Application»)
oXL.Visible = True
‘ Add a new workbook and set a reference to Sheet1.
Set oBook = oXL.Workbooks.Add
Set oSheet = oBook.Sheets(1)
‘ Demo standard Automation from out-of-process,
‘ this routine simply fills in values of cells.
sMsg = «Fill the sheet from out-of-process»
MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground
For i = 1 To 100
For j = 1 To 10
sMsg = «Cell(» & Str(i) & «,» & Str(j) & «)»
oSheet.Cells(i, j).Value = sMsg
Next j
Next i
‘ You’re done with the first test, now switch sheets
‘ and run the same routine via an inserted Microsoft Visual Basic
‘ for Applications macro.
MsgBox «Done.», vbMsgBoxSetForeground
Set oSheet = oBook.Sheets.Add
oSheet.Activate
sMsg = «Fill the sheet from in-process»
MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground
‘ The Import method lets you add modules to VBA at
‘ run time. Change the file path to match the location
‘ of the text file you created in step 3.
oXL.VBE.ActiveVBProject.VBComponents.Import «C:\KbTest.bas»
‘ Now run the macro, passing oSheet as the first parameter
oXL.Run «DoKbTest», oSheet
‘ You’re done with the second test
MsgBox «Done.», vbMsgBoxSetForeground
‘ Turn instance of Excel over to end user and release
‘ any outstanding object references.
oXL.UserControl = True
Set oSheet = Nothing
Set oBook = Nothing
Set oXL = Nothing
End Sub
- В Excel 2007 нажмите кнопку Microsoft Office и выберите Excel параметры. Щелкните Центр управления доверием и выберите центр управления Параметры. Нажмите кнопку Параметры, щелкните, чтобы выбрать поле Доверять доступу к объектной модели проекта VBA, а затем нажмите кнопку ОК два раза.
- В Excel 2003 и более ранних версиях Excel пункт Макрос в меню Инструменты и нажмите кнопку Безопасность. В диалоговом окне Безопасность перейдите на вкладку Надежные источники и выберите Visual Basic Project доступ.
Ссылки
Дополнительные сведения об автоматизации Office от Visual Basic см. на сайте Office поддержки разработки по следующему адресу:
Включение доступа к VBA для создания или открытия Инструменты Visual Studio для проекта системы Microsoft Office
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Перед созданием или открытием Инструменты Visual Studio для проекта Microsoft Office необходимо явно включить доступ к системе проектов Visual Basic для приложений (VBA).
Для проектов разработки Microsoft Office требуется доступ к системе проектов Visual Basic для приложений (VBA) в Microsoft Office Word и Microsoft Office Excel, даже если проекты не используют Visual Basic для приложений. Поддержка элементов управления времени разработки в проектах Visual Basic и C# зависит от системы проектов Visual Basic для приложений.
Некоторые макровирусы Microsoft Office пытаются автоматизировать систему проектов Visual Basic для приложений как способ своего распространения. Разрешая доступ к системе проектов Visual Basic для приложений, вы отключаете средство защиты, которое позволяет предотвратить распространение макровирусов. Тем не менее, остаются стандартные средства обеспечения безопасности макросов: уровень безопасности макросов и список надежных издателей, поддерживаемый для приложений Office, помогут выявить выполнение макросов на компьютере.
Это касается только компьютера разработки. Компьютеры конечных пользователей не нуждаются в этом параметре для запуска решений Office.
Важно отметить, что отключение доступа к системе проектов Visual Basic для приложений само по себе не защитит вас от вирусов, оно просто помогает предотвратить распространение некоторых вирусов в другие документы в случае заражения компьютера макровирусом. Эта возможность отключена по умолчанию, что обеспечивает дополнительный уровень защиты компьютера. Однако ее включение не делает ваш компьютер более подверженным атакам, если вы выполняете рекомендации по обеспечению безопасности.
Лучшая защита от вирусов макросов Office — запуск Office на высоком или очень высоком уровне безопасности, только доверять макросам из проверенных, известных источников и поддерживать актуальность с помощью исправлений безопасности и сканеров вирусов.
Вы можете включить или отключить параметр Trust Access to Visual Basic Project вручную.
При появлении ошибок VBA или COM можно восстановить установку Office.
Заинтересованы в разработке решений, которые расширяют возможности Office на нескольких платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office имеют небольшое пространство по сравнению с надстройками и решениями VSTO, и вы можете создавать их практически с помощью любой технологии веб-программирования, таких как HTML5, JavaScript, CSS3 и XML.
Включение или отключение доступа к проектам Visual Basic
- Перейдите на вкладку Файл .
- Щелкните Параметры.
- Щелкните Центр управления безопасностью и щелкните центр управления безопасностью Параметры.
- В Центре управления безопасностью щелкните макрос Параметры.
- Проверьте или не проверка Доверять доступу к объектной модели проекта VBA, чтобы включить или отключить доступ к проектам Visual Basic.
- Щелкните OK.
Включение или отключение доступа к проектам Visual Basic с помощью системы Microsoft Office 2007
- В меню «Сервис» в Word или Excel наведите указатель мыши на макрос и нажмите кнопку «Безопасность«.
- В диалоговом окне «Безопасность» откройте вкладку «Доверенные издатели«.
- Выберите, чтобы включить или очистить, чтобы отключить, trust Access to Visual Basic Project.
- Щелкните OK.
Настройка уровня безопасности макросов в Office
- Перейдите на вкладку Файл .
- Щелкните Параметры.
- Щелкните Центр управления безопасностью и щелкните центр управления безопасностью Параметры.
- В Центре управления безопасностью щелкните макрос Параметры.
- В разделе «Макрос Параметры» выберите нужный параметр.
- Щелкните OK.
Настройка уровня безопасности макросов Office с помощью системы Microsoft Office 2007
- В меню «Сервис» в Word или Excel наведите указатель мыши на макрос и нажмите кнопку «Безопасность«.
- На вкладке «Уровень безопасности» выберите нужный параметр. Вкладка «Уровень безопасности» содержит сведения о каждом уровне. Дополнительные сведения см. в разделе «Уровни безопасности макросов» справки Microsoft Office.
Установка VBA в выпуске 2007 системы Microsoft Office
- В панель управления запустите команду «Добавить или удалить программы» или «Программы и компоненты«.
- Выберите Office в списке установленных программ .
- Щелкните Изменить.
- Выберите » Добавить или удалить компоненты» и нажмите кнопку «Продолжить«.
- Нажмите кнопку «Выбрать расширенную настройку приложений» и нажмите кнопку «Далее«.
- Разверните общие функции Office в списке «Выбор параметров обновления» для приложений и инструментов.
- Откройте раскрывающееся меню рядом с Visual Basic для приложений и нажмите кнопку «Запустить с моего компьютера«.
- Нажмите кнопку Продолжить.
- Нажмите кнопку Закрыть.
Восстановление установки Office
- В панель управления запустите команду «Добавить или удалить программы» или «Программы и компоненты«.
- Выберите свою версию Office в списке установленных программ .
- Щелкните Изменить.
- Выберите «Переустановить » или «Восстановить«, а затем нажмите кнопку «Далее«.
- Выберите » Обнаружить и восстановить ошибки» в моей установке Office и нажмите кнопку «Установить«.
Связанный контент
Автоматический запуск макроса при открытии книги
Может потребоваться, чтобы макрос, записанный вами, запускался автоматически при запуске определенной книги. В следующей процедуре используется пример, чтобы показать, как это работает. Кроме того, может потребоваться автоматически запускатьмакрос при Excel запуска .
Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Дополнительные сведения см. в статье Отображение вкладки «Разработчик».
Чтобы использовать пример ниже, откройте новую книгу.
Важно: Код VBA нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.

- Откройте вкладку Разработчик и щелкните элемент Visual Basic.
- В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook. Если вы не видите обозреватель Project, перейдите в >Project проводникаили нажмите CTRL+R.
- В окне модуля, которое открывается справа, вставьте следующий код:
Private Sub Workbook_Open() ' Put your code here End Sub
При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.
Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Для этого:
- В меню выберите пункт Параметры Excel >. >ленты & панели инструментов.
- В категории Настройка ленты в списке Основные вкладки выберите вариант Разработчик.
- Нажмите кнопку Сохранить.
Чтобы использовать пример ниже, откройте новую книгу.
Важно: Код VBA нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.
- Откройте вкладку Разработчик и щелкните элемент Visual Basic.
- В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook.
- В окне модуля, которое открывается справа, вставьте следующий код:
Private Sub Workbook_Open() ' Put your code here End Sub
При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.
Дополнительные сведения
Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.
Запуск макроса
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel Starter 2010 Еще. Меньше
Существует несколько способов запуска макроса в Microsoft Excel. Макрос — это действие или набор действий, с помощью которых можно автоматизировать различные задачи. Макрос записывется на Visual Basic для приложений программирования. Макрос всегда можно запустить, нажав кнопку Макрос на вкладке Разработчик на ленте. В зависимости от того, как макрос назначен для запуска, его также можно запустить, нажав сочетание клавиш сочетание клавиш, нажав кнопку на панели быстрого доступа или в настраиваемой группе на ленте либо щелкнув объект, рисунок или элемент управления. Кроме того, макрос можно запускать автоматически при запуске книги.
Перед запуском макроса
Перед началом работы с макросами следует включить вкладку Разработчик.
- Чтобы Windows, перейдите в меню Параметры >>Настроить ленту.
- Для Macперейдите на Excel >параметры. >ленты & панели инструментов.
- Затем в разделе Настройка ленты в разделе Основныевкладки, в разделе Разработчик, нажмите кнопку ОК.
Запуск макроса на вкладке «Разработчик»
- Откройте книгу, содержащую нужный макрос.
- На вкладке Разработчик в группе Код нажмите кнопку Макросы.
- В поле Имя макроса выберите макрос, который вы хотите запустить, и нажмите кнопку Выполнить.
- У вас также есть другие варианты:
- Параметры: добавление сочетания клавиш или описания макроса.
- Шаг. Откроется Visual Basic редактора в первой строке макроса. Нажатие F8 позволит вам по одной строке пролиться между кодами макроса.
- Изменить. Откроется редактор Visual Basic и вы сможете при необходимости изменить код макроса. После внесения изменений можно нажать F5, чтобы запустить макрос из редактора.
Запуск макроса с помощью сочетания клавиш
Вы можете добавить сочетание клавиш в макрос при его записи, а также добавить его к существующему макросу:
- На вкладке Разработчик в группе Код нажмите кнопку Макросы.
- В поле Имя макроса выберите макрос, который нужно назначить сочетанием клавиш.
- Нажмите кнопку Параметры. Откроется диалоговое окно Параметры макроса.
- В поле Сочетания клавиш введите любую букву в нижнем или верхнем регистре, которую вы хотите использовать с сочетаниями клавиш.
- Для Windowsклавиша для букв в нижнем регистре — CTRL+letter. Для букв верхнего регистра это CTRL+SHIFT+Letter.
- Для Macдля букв в нижнем регистре есть клавиши OPTION+COMMAND+LETTER,но клавиши CTRL+letter также будут работать. Для букв верхнего регистра это CTRL+SHIFT+Letter.
- Будьте внимательны при назначении ярлыков, так как они будут переопределять все эквивалентные стандартные Excel, пока открыта книга с макросом. Например, если назначить макрос CTRL+Z,вы потеряете возможность отменить. В связи с этим обычно лучше использовать клавиши CTRL+SHIFT+БУКВА С верхнего регистра, например CTRL+SHIFT+Z, для которых в Excel нет эквивалентных Excel.
Список сочетаний клавиш CTRL, которые уже назначены в Excel, см. в статье Excel сочетания клавиш и клавиши для работы с функцией.
Запуск макроса нажатием кнопки на панели быстрого доступа
Чтобы запустить макрос нажатием кнопки на панели быстрого доступа, сначала необходимо добавить соответствующую кнопку на панель. Для этого см. назначение макроса кнопке.
Запуск макроса с помощью кнопки в настраиваемой группе на ленте
Вы можете создать пользовательскую группу, которая появится на вкладке ленты, а затем назначить макрос кнопке в этой группе. Например, можно добавить настраиваемую группу «Мои макросы» на вкладку Разработчик, а затем добавить в новую группу макрос (который отображается как кнопка). Для этого см. назначение макроса кнопке.
Запуск макроса путем щелчка области графического объекта
Запуск макроса путем щелчка области графического объекта
Вы можете создать хот-спот на графическом элементе, который пользователи могут щелкнуть, чтобы запустить макрос.
- На компьютере вставьте графический объект, например рисунок, или нарисуйте фигуру. Распространенный сценарий — нарисовать фигуру Скруглённый прямоугольник и отформатировали ее так, чтобы она выглядела как кнопка. Чтобы узнать о вставке графического объекта, см. добавление, изменение и удаление фигур.
- Щелкните правой кнопкой мыши созданный хот-спот и выберите пункт Назначить макрос.
- Выполните одно из указанных ниже действий.
- Чтобы назначить существующий макрос графическому объекту, дважды щелкните макрос или введите его имя в поле Имя макроса.
- Чтобы записать новый макрос для назначения выбранному графическому объекту, нажмите кнопку Запись ,в диалоговом окне Запись макроса введите имя макроса и нажмите кнопку ОК, чтобы начать запись макроса. Завершив запись макроса, нажмите кнопку Остановить на вкладке Разработчик в группе Код.
Совет: Вы также можете нажать в левой части панели состояния.
Запуск макроса из редактора Visual Basic (VBE)
На вкладке Разработчик нажмите кнопку Visual Basic, чтобы запустить редактор Visual Basic(VBE). Перейдите Project проводнике, чтобы найти модуль, содержащий макрос, который вы хотите запустить, и откройте его. Все макрос в этом модуле будут перечислены в области справа. Выберите макрос, который вы хотите запустить, разместив курсор в любом месте макроса и нажимая F5или выбрав в меню пункт Выполнить > Макрос.
Настройка автоматического запуска макроса при открытии книги
Создайте Workbook_Open события.
В следующем примере событие Open используется для запуска макроса при открытии книги.
- Откройте или создайте книгу, в которую нужно добавить макрос.
- На вкладке Разработчик в группе Код нажмите кнопку Visual Basic.
- В окне Project проводника щелкните правой кнопкой мыши объект ThisWorkbook и выберите просмотр кода.
Совет: Если окно Project проводника не отображается, в меню Вид выберите пункт Project проводник.
Private Sub Workbook_Open()
Примечание: Ячейка A1 на листе «Лист1» также содержит дату в результате Workbook_Open процедуры.
Дополнительные сведения
Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.
См. также

Нужна дополнительная помощь?
Нужны дополнительные параметры?
Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.




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