Загальні відомості
Під час автоматизації 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 розробки за такою адресою: