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: