Sammendrag
Når du automatiserer et Office-produkt fra Visual Basic, kan det være nyttig å flytte en del av koden til en Microsoft Visual Basic for Applications-modul (VBA) som kan kjøre i prosessområdet på serveren. Dette kan øke den generelle kjøringshastigheten for programmet og bidra til å lindre problemer hvis serveren bare utfører en handling når et anrop utføres i prosessen.
Denne artikkelen viser hvordan du dynamisk legger til en VBA-modul i et kjørende Office-program fra Visual Basic, og kaller deretter makroen for å fylle ut et prosessregneark.Mer informasjon
Følgende eksempel viser hvordan du setter inn en kodemodul i Microsoft Excel, men du kan bruke samme teknikk for Word og PowerPoint fordi begge integrerer den samme VBA-motoren.
Eksemplet bruker en statisk tekstfil for kodemodulen som settes inn i Excel. Du bør vurdere å flytte koden til en ressursfil som du kan kompilere til programmet, og deretter pakke den ut i en midlertidig fil ved behov ved kjøring. Dette vil gjøre prosjektet mer håndterbart for ny distribusjon. Fra Microsoft Office XP må en bruker gi tilgang til VBA-objektmodellen før en automatiseringskode som er skrevet for å manipulere VBA, vil fungere. Dette er en ny sikkerhetsfunksjon med Office XP. Hvis du vil ha mer informasjon, kan du se følgende knowledge base-artikkel:282830 Programmatisk tilgang til Office XP VBA Project nektes
Trinn for å bygge eksemplet
-
Først oppretter du en ny tekstfil kalt KbTest.bas (uten .txt filtypen). Dette er kodemodulen vi setter inn i Excel under kjøring.
-
Legg til følgende kodelinjer i tekstfilen:
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 -
Lagre tekstfilen i C:\KbTest.bas-katalogen, og lukk deretter filen.
-
Start Visual Basic og opprett et standardprosjekt. Skjema1 opprettes som standard.
-
KlikkReferences på Project-menyen, og velg deretter riktig typebibliotekversjon som lar deg bruke tidlig innbinding til å Excel.
Velg for eksempel ett av følgende:-
For Microsoft Office Excel 2007 velger du 12.0-biblioteket.
-
For Microsoft Office Excel 2003 velger du 11.0-biblioteket.
-
For Microsoft Excel 2002 velger du 10.0-biblioteket.
-
For Microsoft Excel 2000 velger du 9.0-biblioteket.
-
For Microsoft Excel 97 velger du 8.0-biblioteket.
-
-
Legg til en knapp i Skjema1, og plasser følgende kode i behandlingsprogrammet for klikkhendelsen for knappen:
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 -
For Excel 2002 og senere versjoner av Excel må du aktivere tilgang til VBA-prosjektet. Hvis du vil gjøre dette, kan du bruke en av følgende metoder:
-
I Excel 2007 klikker du Microsoft Office, og deretter klikker du Excel Alternativer. Klikk Klareringssenter, og klikk deretter Klareringssenter Innstillinger. Klikk Makro Innstillinger, klikk for å merke av for Klarer tilgang til VBA-prosjektobjektmodellen, og klikk deretter OK to ganger.
-
I Excel 2003 og i tidligere versjoner av Excel peker du på Makro på Verktøy-menyen, og deretter klikker du Sikkerhet. Klikk fanen Klarerte kilder i dialogboksen Sikkerhet, og klikk deretter for å merke av for Klarer tilgang til Visual Basic Project.
-
-
Kjør Visual Basic prosjektet.
Referanser
Hvis du vil ha mer informasjon om automatisering av Office fra Visual Basic, kan du se Office nettstedet for utviklingsstøtte på følgende adresse: