Kopsavilkums
Automatizējot Office produktu no Visual Basic, var būt noderīgi pārvietot koda daļu uz Microsoft Visual Basic for Applications (VBA) moduli, kas var darboties servera procesa vietā. Tas var uzlabot vispārējo izpildes ātrumu jūsu lietojumprogrammai un palīdzēt samazināt problēmas, ja serveris veic darbību tikai tad, kad tiek veikts izsaukums.
Šajā rakstā aprakstīts, kā dinamiski pievienot VBA moduli palaistai Office lietojumprogrammai no Visual Basic un pēc tam izsaukt makro, lai aizpildītu laikā izveidotu darblapu.
Papildinformācija
Tālāk redzamais paraugs parāda koda moduļa ievietošanu programmā Microsoft Excel, bet varat izmantot to pašu metodi programmai Word un PowerPoint, jo abas ietver vienu un to pašu VBA programmu.
Paraugs izmanto statisku teksta failu koda modulim, kas tiek ievietots Excel. Iespējams, vēlēsities apsvērt iespēju pārvietot kodu uz resursu failu, kuru varat kompilēt lietojumprogrammā, un pēc tam izvilkt pagaidu failā, ja tas nepieciešams izpildlaikā. Tādējādi projekts būs pārvaldāms atkārtotai izplatīšanai.
Sākot ar Microsoft Office XP, lietotājam ir jāpiešķir piekļuve VBA objekta modelim, pirms darbosies automatizācijas kods, kas uzrakstīts manipulācijai ar VBA. Šis ir jauns drošības līdzeklis operētājsistēmā Office XP. Papildinformāciju skatiet šajā zināšanu bāzes rakstā:
282830 Programmatiska piekļuve Office XP VBA Project liegta
Steps to build the sample
-
Vispirms izveidojiet jaunu teksta failu ar nosaukumu KbTest.bas (bez .txt paplašinājuma). Šis ir koda modulis, ko pēc Excel mēs ievietosim lappušu izpildē.
-
Teksta failā pievienojiet šādas koda rindiņas:
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 -
Saglabājiet teksta failu direktorijā C:\KbTest.bas un pēc tam aizveriet failu.
-
Sāciet Visual Basic un izveidojiet standarta projektu. Veidlapa1 tiek izveidota pēc noklusējuma.
-
Izvēlnē Project noklikšķiniet uz Atsauksmes un pēc tam atlasiet atbilstošo tipu bibliotēkas versiju, kas ļauj izmantot agrīnu saistīšanu, lai Excel.
Piemēram, atlasiet kādu no šīm opcijām:-
Lai Microsoft Office Excel 2007, atlasiet bibliotēku 12.0.
-
Lai Microsoft Office Excel 2003, atlasiet bibliotēku 11.0.
-
Lai Microsoft Excel 2002, atlasiet bibliotēku 10.0.
-
Lai Microsoft Excel 2000, atlasiet 9.0 bibliotēku.
-
Lai Microsoft Excel 97, atlasiet 8.0 bibliotēku.
-
-
Pievienojiet pogu formai1 un novietojiet tālāk norādīto kodu pogas klikšķa notikuma apdarinātājā:
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 -
Operētājsistēmas Excel 2002 un jaunākām Excel versijām jāieslēdz piekļuve VBA projektam. Lai to izdarītu, izmantojiet kādu no šīm metodēm:
-
Programmā Excel 2007 noklikšķiniet uz pogas Microsoft Office un pēc tam uz Excel opcijas. Noklikšķiniet uz Drošības kontroles centrs un pēc tam noklikšķiniet uz Drošības kontroles centrs Iestatījumi. Noklikšķiniet uz Iestatījumi makro, noklikšķiniet, lai atzīmētu izvēles rūtiņu Uzticēties VBA projekta objekta modelim un pēc tam divas reizes noklikšķiniet uz Labi.
-
Programmā Excel 2003 un vecākās programmas Excel izvēlnē Rīki norādiet uz Makro un pēc tam noklikšķiniet uz Drošība. Dialoglodziņā Drošība noklikšķiniet uz cilnes Uzticamie avoti un pēc tam noklikšķiniet uz izvēles rūtiņas Uzticēties Visual Basic Project vadīklām.
-
-
Palaidiet Visual Basic projektu.
Atsauces
Lai iegūtu papildinformāciju par Office automatizāciju Visual Basic, lūdzu, skatiet Office izstrādes atbalsta vietni šajā adresē: