Применяется к
Microsoft Office Professional Edition 2003 Excel 2010

Аннотация

При автоматизации 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 отклонен

Шаги по построению примера

  1. Сначала создайте новый текстовый файл с именем KbTest.bas (без .txt расширения). Это модуль кода, который мы вставляем в Excel во время запуска.

  2. В текстовом файле добавьте следующие строки кода:

       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
  3. Сохраните текстовый файл в каталоге C:\KbTest.bas, а затем закроем его.

  4. Начните Visual Basic и создайте стандартный проект. По умолчанию создается форма 1.

  5. В меню Project щелкните Ссылки, а затем выберите версию библиотеки соответствующего типа, которая позволяет использовать ранняя привязка для Excel.Например, выберите один из следующих ок.

    • В 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.

  6. Добавьте кнопку в форму 1 и поместите следующий код в обработник события Click:

       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
  7. Для Excel 2002 и для более поздних версий Excel необходимо включить доступ к проекту VBA. Это можно сделать одним из описанных ниже способов.

    • В Excel 2007 нажмите кнопку Microsoft Office и выберите Excel параметры. Щелкните Центр управления доверием и выберите центр управления Параметры. Нажмите кнопку Параметры, щелкните, чтобы выбрать поле Доверять доступу к объектной модели проекта VBA, а затем нажмите кнопку ОК два раза.

    • В Excel 2003 и более ранних версиях Excel пункт Макрос в меню Инструменты и нажмите кнопку Безопасность. В диалоговом окне Безопасность перейдите на вкладку Надежные источники и выберите Visual Basic Project доступ.

  8. Запустите Visual Basic проекта.

Ссылки

Дополнительные сведения об автоматизации Office от Visual Basic см. на сайте Office поддержки разработки по следующему адресу:

http://support.microsoft.com/ofd

Нужна дополнительная помощь?

Нужны дополнительные параметры?

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