Sažetak
Prilikom automatizacije Office proizvoda iz Visual Basic, može biti korisno premjestiti dio koda u modul programa Microsoft Visual Basic for Applications (VBA) koji se može izvoditi unutar prostora procesa poslužitelja. To može povećati ukupnu brzinu izvršenja aplikacije i olakšati probleme ako poslužitelj izvršava akciju samo kada je poziv u tijeku.
U ovom se članku pokazuje kako dinamički dodati VBA modul u pokrenutu aplikaciju Office programa Visual Basic, a zatim pozvati makronaredbu da bi radni list ispunio u tijeku.
Dodatne informacije
Sljedeći uzorak pokazuje umetanje modula koda u Microsoft Excel, ali možete koristiti istu tehniku za Word i PowerPoint jer obje uključuju isti VBA modul.
Uzorak koristi statičnu tekstnu datoteku za modul koda koji je umetnut u Excel. Preporučujemo da razmislite o premještanju koda u datoteku resursa koju možete sastaviti u aplikaciju, a zatim izdvojiti u privremenu datoteku kada je to potrebno u vrijeme izvoditi. Time bi se projektom bolje upravljao za ponovno raspodiobu.
Počevši od Microsoft Office XP, korisnik mora odobriti pristup VBA modelu objekta prije nego što bilo koji kod automatizacije napisan za upravljanje VBA-om funkcionira. To je nova sigurnosna značajka s Office XP. Dodatne informacije potražite u sljedećem članku iz baze znanja:
282830 Programski pristup Office VBA Project XP
Koraci za izradu uzorka
-
Najprije stvorite novu tekstnu datoteku pod nazivom KbTest.bas (bez .txt proširenja). To je modul koda koji ćemo umetnuti u Excel tijekom vremena.
-
U tekstnu datoteku dodajte sljedeće retke koda:
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 -
Spremite tekstnu datoteku u direktorij C:\KbTest.bas, a zatim zatvorite datoteku.
-
Pokrenite Visual Basic i stvorite standardni projekt. Obrazac1 po zadanom se stvara.
-
Na izborniku ProjectklikniteReferencije, a zatim odaberite odgovarajuću verziju biblioteke vrsta koja omogućuje korištenje ranog povezivanja za Excel.
Na primjer, odaberite nešto od sljedećeg:-
Da Microsoft Office Excel 2007, odaberite biblioteku 12.0.
-
Da Microsoft Office Excel 2003, odaberite biblioteku 11.0.
-
Da Microsoft Excel 2002, odaberite biblioteku 10.0.
-
Da Microsoft Excel 2000, odaberite biblioteku 9.0.
-
Da Microsoft Excel 97, odaberite biblioteku 8.0.
-
-
Dodajte gumb u Obrazac1 i postavite sljedeći kod u rukovatelj za događaj klika na gumb:
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 -
Da Excel 2002 i novijim verzijama programa Excel, morate uključiti pristup VBA projektu. Da biste to učiniti, koristite jedan od sljedećih načina:
-
U Excel 2007 kliknite gumb Microsoft Office, a zatim mogućnosti Excel mogućnosti. Kliknite Centar za pouzdanost, a zatim Centar za pouzdanost Postavke. Kliknite Makronaredba Postavke, kliknite da biste odabrali potvrdni okvir Pristup pouzdanosti modelu objekta VBA projekta, a zatim dvaput kliknite U redu.
-
U Excel 2003 i u starijim verzijama programa Excel pokažite na Makronaredba na izborniku Alati, a zatim kliknite Sigurnost. U dijaloškom okviru Sigurnost kliknite karticu Pouzdani izvori, a zatim potvrdite okvir Pouzdani pristup Visual Basic Project pouzdanim izvorima.
-
-
Pokrenite Visual Basic projekt.
Reference
Dodatne informacije o automatizaciji Office s Visual Basic potražite na web-mjestu Office razvojne podrške na sljedećoj adresi: