Povzetek
Pri avtomatizaciji izdelka Office iz Visual Basic bi bilo morda koristno, da del kode premaknete v modul Microsoft VBA (VBA), ki se lahko izvaja v prostoru procesa v strežniku. To lahko poveča skupno hitrost izvajanja aplikacije in pomaga odpraviti težave, če strežnik izvaja dejanje le med postopkom klica.
Ta članek prikazuje, kako dinamično dodate modul VBA v program, ki se izvaja Office programa Visual Basic, in nato pokličite makro, da zapolni delovni list v postopku.
Več informacij
Ta vzorec prikazuje vstavljanje modula kode v Microsoft Excel, vendar lahko uporabite enako tehniko za Word in PowerPoint, ker oba vključujeta isti mehanizem VBA.
Vzorec uporablja statično besedilno datoteko za modul kode, ki je vstavljen v Excel. Morda boste želeli premakniti kodo v datoteko vira, ki jo lahko zberejo v aplikaciji, in jo nato ekstrahitivti v začasno datoteko, ko jo potrebujete med izvajanjem. Tako bi bilo projekt mogoče lažje upravljati za ponovno porazdelitev.
Od Microsoft Office XP naprej mora uporabnik odobriti dostop do predmetnega modela VBA, preden bo delovala katera koli avtomatizacijska koda, ki je zapisana za spreminjanje kode VBA. To je nova varnostna funkcija s sistemom Office XP. Če želite več informacij, si oglejte ta članek v zbirki znanja:
282830 Programmatic Access to Office XP VBA Project is Denied
Steps to build the sample
-
Najprej ustvarite novo besedilno datoteko z imenom KbTest.bas (brez .txt pripone). To je modul kode, ki ga bomo vstaviti v Excel med izvajanjem.
-
V besedilno datoteko dodajte te vrstice kode:
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 -
Shranite besedilno datoteko v imenik C:\KbTest.bas, nato pa zaprite datoteko.
-
Začnite Visual Basic in ustvarite standardni projekt. Obrazec1 je privzeto ustvarjen.
-
V Project meniju klikniteReferences, nato pa izberite ustrezno različico knjižnice vrst, ki omogoča uporabo predčasne vezave za Excel.
Izberite na primer nekaj od tega:-
Za Microsoft Office Excel 2007 izberite knjižnico 12.0.
-
Za Microsoft Office Excel 2003 izberite knjižnico 11.0.
-
Za Microsoft Excel 2002 izberite knjižnico 10.0.
-
Za Microsoft Excel 2000 izberite knjižnico 9.0.
-
Če Microsoft Excel 97, izberite knjižnico 8.0.
-
-
Dodajte gumb v Obrazec1 in v rutino za obravnavo postavite to kodo za dogodek Click gumba:
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 -
Za Excel 2002 in novejše različice Excel morate vklopiti dostop do projekta VBA. To naredite na enega od teh načinov:
-
V Excel 2007 kliknite gumb Microsoft Office, nato pa kliknite Excel možnosti. Kliknite Središče zaupanja in nato še Središče zaupanja Nastavitve. Kliknite Zavihek Nastavitve, potrdite polje Zaupaj dostopu do predmetnega modela projekta VBA in nato dvakrat kliknite V redu.
-
V Excel 2003 in starejših različicah Excel, v meniju Orodja pokažite na Makro in kliknite Varnost. V pogovornem oknu Varnost kliknite zavihek Zaupanja vredni viri, nato pa kliknite, da potrdite polje Zaupaj Visual Basic Project dostop do vsebine.
-
-
Zaženite Visual Basic projekta.
Reference
Če želite več informacij o avtomatizaciji avtomatizacije Office iz Visual Basic glejte spletno mesto podpore za Office za razvoj na tem naslovu: