Преминаване към основното съдържание
Поддръжка
Влизане с Microsoft
Влезте или създайте акаунт.
Здравейте,
Изберете друг акаунт.
Имате няколко акаунта
Изберете акаунта, с който искате да влезете.

Обобщена информация

Когато автоматизирате продукт на 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 НА 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. Добавете бутон към 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 Опции. Щракнете върху Център за сигурност и след това щракнете върху Център за сигурност Настройки. Щракнете върху Настройки макроси, щракнете, за да отметнете квадратчето Доверете се на Access до обектния модел на VBA проект и след това щракнете върху OK два пъти.

    • В Excel 2003 и в по-стари версии на Excel посочете Макрос в менюто Инструменти и след това щракнете върху Защита. В диалоговия прозорец Защита щракнете върху раздела Надеждни източници и след това щракнете, за да отметнете квадратчето Достъп до Visual Basic Project сигурност.

  8. Стартирайте Visual Basic проект.

Препратки

За повече информация относно автоматизацията на Office от Visual Basic, вижте сайта Office поддръжка за развитие на следния адрес:

http://support.microsoft.com/ofd

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?
Като натиснете „Подаване“, вашата обратна връзка ще се използва за подобряване на продуктите и услугите на Microsoft. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

Благодарим ви за обратната връзка!

×