Загальні відомості
Під час автоматизації 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
-
Спочатку створіть новий текстовий файл з іменем 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 -
Збережіть текстовий файл у каталозі C:\KbTest.bas, а потім закрийте його.
-
Почніть Visual Basic і створіть стандартний проект. За замовчуванням створюється форма1.
-
У меню 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.
-
-
Додайте кнопку до 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 -
У Excel версії 2002 та пізніших Excel слід увімкнути доступ до проекту VBA. Для цього скористайтеся одним із наведених нижче способів.
-
У Excel 2007 натисніть кнопку Microsoft Office, а потім виберіть Excel Параметри. Виберіть центр безпеки та конфіденційності та натисніть кнопку Центр безпеки та Настройки. Натисніть кнопку Настройки, установіть прапорець Довіряти доступ до об'єктної моделі проекту VBA, а потім двічі натисніть кнопку OK.
-
У Excel версії 2003 та попередніх версіях Excel у меню Знаряддя наведіть вказівник миші на макрос і виберіть Безпека. У діалоговому вікні Безпека перейдіть на вкладку Надійні джерела та встановіть прапорець Довіряти доступ Visual Basic Project доступу.
-
-
Запустіть Visual Basic проекту.
Посилання
Докладні відомості про автоматизацію Office з Visual Basic див. на сайті підтримки Office розробки за такою адресою: