Застосовується до
Microsoft Office Professional Edition 2003 Excel 2010

Загальні відомості

Під час автоматизації Office продукту з Visual Basic, може бути доцільно перемістити частину коду до модуля Microsoft Visual Basic for Applications (VBA), який можна запустити в процесі простору сервера. Це може підвищити загальну швидкість виконання програми та допомогти вирішити проблеми, лише якщо сервер виконує дію, коли виклик виконується.У цій статті показано, як динамічно додати модуль VBA до запущеної програми Office з Visual Basic, а потім викликати макрос, щоб заповнити робочий аркуш.

Додаткові відомості

Наведений нижче зразок демонструє вставлення модуля коду в Microsoft Excel, але цей метод можна використовувати для Word і PowerPoint тому що обидва модулі VBA вставлено.У зразку використовується статичний текстовий файл для модуля коду, вставленого в Excel. Може знадобитися перемістити код у файл ресурсу, який можна об'слити в програму, а потім отримати в тимчасовий файл, коли це потрібно під час запуску. Після цього проект буде керованим для повторного розподілу.Починаючи з Microsoft Office XP, користувач має надати доступ до об'єктної моделі VBA, перш ніж працюватиме будь-який код автоматизації, написаний для керування VBA. Це нова функція безпеки для Office XP. Докладні відомості див. в такій статті бази знань:

282830 В accessmatic Access to Office XP VBA Project is Denied

Steps to build the sample

  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. Додайте кнопку до form1 і розмістіть у маркері події 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, а потім двічі натисніть кнопку OK.

    • У Excel версії 2003 та попередніх версіях Excel у меню Знаряддя наведіть вказівник миші на макрос і виберіть Безпека. У діалоговому вікні Безпека перейдіть на вкладку Надійні джерела та встановіть прапорець Довіряти доступ Visual Basic Project доступу.

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

Посилання

Докладні відомості про автоматизацію Office з Visual Basic див. на сайті підтримки Office розробки за такою адресою:

http://support.microsoft.com/ofd

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.