Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

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

Під час автоматизації 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

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

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

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

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

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×