Suvestinė
Automatizuojant Office produktą iš "Visual Basic", gali būti naudinga perkelti dalį kodo į "Microsoft Visual Basic for Applications" (VBA) modulį, kuris gali veikti serverio proceso erdvėje. Tai gali padidinti bendrą jūsų taikomosios programos vykdymo greitį ir padėti sumažinti problemas, jei serveris atlieka veiksmą tik kai skambutis vyksta.
Šiame straipsnyje parodoma, kaip dinamiškai įtraukti VBA modulį į Office taikomąją programą iš "Visual Basic", tada iškviesti makrokomandą, kad užpildytumėte apdorojamą darbalapį.
Daugiau informacijos
Toliau pateiktame pavyzdyje parodytas kodo modulio įterpimas į Microsoft Excel, bet galite naudoti tą pačią "Word" ir "PowerPoint, nes abiejuose yra tas pats VBA modulis.
Pavyzdys naudoja statinį teksto failą kodo moduliui, kuris įterpiamas į Excel. Galbūt norėsite perkelti kodą į išteklių failą, kurį galite kompiliuoti į savo taikomąją programą, tada, kai reikia, išskleisti į laikinąjį failą. Taip projektas būtų lengviau valdomas, kad būtų galima jį perskirstyti.
Pradedant nuo Microsoft Office XP" vartotojas turi suteikti prieigą prie VBA objekto modelio, kad veiktų bet kuris automatizavimo kodas, parašytas valdyti VBA. Tai nauja saugos funkcija su "Office XP". Daugiau informacijos ieškokite šiame žinių bazės straipsnyje:
282830 Programinė prieiga prie "Office XP" VBA Project uždrausta
Veiksmai, kaip sukurti pavyzdį
-
Pirmiausia sukurkite naują teksto failą, pavadintą KbTest.bas (be .txt plėtinio). Tai kodo modulis, kurį įterpsime į Excel vykdymo metu.
-
Teksto faile įtraukite šias kodo eilutes:
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 -
Įrašykite teksto failą į katalogą C:\KbTest.bas, tada uždarykite failą.
-
Pradėkite Visual Basic ir sukurkite standartinį projektą. Forma1 sukuriama pagal numatytuosius nustatymus.
-
Meniu ProjectspustelėkiteAferencijos, tada pasirinkite atitinkamą tipo bibliotekos versiją, kuri leidžia naudoti ankstyvą susiejimą su Excel.
Pavyzdžiui, pasirinkite vieną iš šių veiksmų:-
Jei Microsoft Office Excel 2007" pasirinkite biblioteką 12.0.
-
Jei Microsoft Office Excel 2003" pasirinkite biblioteką 11.0.
-
Jei Microsoft Excel 2002" pasirinkite biblioteką 10.0.
-
Jei Microsoft Excel 2000" pasirinkite 9.0 biblioteką.
-
Jei Microsoft Excel 97" pasirinkite biblioteką 8.0.
-
-
Įtraukite mygtuką į "Form1" ir į mygtuko "Click" įvykio apdorojimo programą įdėkite šį kodą:
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 -
Jei Excel 2002" ir naujesnėse "Excel versijose, turite įjungti prieigą prie VBA projekto. Norėdami tai padaryti, naudokite vieną iš šių būdų:
-
2007 Excel spustelėkite mygtuką Microsoft Office, tada spustelėkite Excel parinktys. Spustelėkite Patikimumo centras, tada spustelėkite Patikimumo centro Parametrai. Spustelėkite Makrokomandos Parametrai, spustelėkite, kad pasirinktumėte žymės langelį Pasitikėti prieiga prie VBA projekto objekto modelio, tada du kartus spustelėkite Gerai.
-
2003 Excel. ir ankstesnėse "Excel" versijose meniu Įrankiai nukreipkite žymiklį į Makrokomanda, tada spustelėkite Sauga. Dialogo lange Sauga spustelėkite skirtuką Patikimi šaltiniai, tada spustelėkite, kad pasirinktumėte žymės langelį Pasitikėti prieiga prie Visual Basic Project prieigos.
-
-
Paleiskite Visual Basic projektą.
Nuorodos
Daugiau informacijos apie "Office Visual Basic automatizavimą žr. Office kūrimo palaikymo svetainėje šiuo adresu: