Összefoglalás
Amikor automatizál egy Office-terméket az Visual Basic-ból, hasznos lehet a kód egy részét áthelyezni egy Microsoft Visual Basic for Applications (VBA) modulba, amely a kiszolgáló folyamatterületén belül fut. Ez növelheti az alkalmazás általános végrehajtási sebességét, és segíthet a problémák megoldásában, ha a kiszolgáló csak akkor továbbít egy műveletet, ha folyamatban van egy hívás.
Ez a cikk azt mutatja be, hogy miként adhat hozzá dinamikusan egy VBA-modult egy Office futó Visual Basic-alkalmazáshoz, majd hogyan hívható meg a makró a munkalap kitöltéséhez a folyamat során.
További információ
Az alábbi minta egy kódmodul Microsoft Excel a Microsoft Excel- és a PowerPoint használatát mutatja be, mivel mindkettő ugyanazt a VBA-motort tartalmazza.
A minta egy statikus szövegfájlt használ a modulba beszúrt kódmodulhoz Excel. Fontolja meg a kód áthelyezését egy olyan erőforrásfájlba, amit aztán lefordíthat az alkalmazásba, majd szükség esetén ideiglenes fájlba gyűjtheti. Ez a projekt kezelhetőbb lesz az újraterjesztéshez.
A Microsoft Office XP-vel kezdődően a felhasználónak hozzáférést kell adni a VBA-objektummodellhez ahhoz, hogy működjön a VBA-kód kezeléséhez írt automatizálási kód. Ez egy új biztonsági szolgáltatás, amely XP Office rendelkezik. További információt a következő Tudásbázis-cikkben talál:
282830 A VBA-Office XP rendszerhez Project programozott hozzáférés
A minta felépítésének lépései
-
Először hozzon létre egy KbTest.bas nevű új szövegfájlt (a .txt nélkül). Ezt a kódmodult fogjuk beszúrni Excel futásidőben.
-
A szövegfájlba vegye fel az alábbi kódsorokat:
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 -
Mentse a szövegfájlt a C:\KbTest.bas könyvtárba, majd zárja be a fájlt.
-
Indítsa Visual Basic, és hozzon létre egy normál projektet. Az űrlap1 alapértelmezés szerint létrejön.
-
A Project menüben kattintson aReferences elemre, majd válassza ki a megfelelő típusú tárverziót, amellyel korai kötést használhat a Excel.
Válasszon például az alábbi lehetőségek közül:-
A Microsoft Office Excel 2007-ben válassza a 12.0 tárat.
-
A Microsoft Office Excel 2003-ban válassza a 11.0 tárat.
-
A Microsoft Excel 2002-ben válassza a 10.0 tárat.
-
A Microsoft Excel 2000-ben válassza a 9.0-s tárat.
-
A Microsoft Excel 97- hez válassza a 8.0-s tárat.
-
-
Vegyen fel egy gombot az Űrlap1 űrlapra, és helyezze a következő kódot a gomb Click eseményének kezelőpontba:
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 -
A Excel 2002-es és az Excel verziókhoz be kell kapcsolnia a VBA-projekthez való hozzáférést. Ehhez kövesse az alábbi módszerek egyikét:
-
A Excel 2007-ben kattintson a Microsoft Office gombra, majd a Beállítások Excel parancsra. Kattintson az Trust Center elemre, majd az Gépház. Kattintson a Gépház elemre, jelölje be a VBA-projekt objektummodellhez való hozzáférés megbízható jelölőnégyzetet, majd kattintson kétszer az OK gombra.
-
A Excel 2003-ban és a Excel verziókban mutasson az Eszközök menü Makró pontjára, majd kattintson a Biztonság parancsra. A Biztonság párbeszédpanelen kattintson a Megbízható források fülre, majd jelölje be a Hozzáférés megbízható Visual Basic Project jelölőnégyzetet.
-
-
Futtassa a Visual Basic projektet.
Hivatkozások
Ha többet meg kell Office a Visual Basic, látogasson el a Office fejlesztésére vonatkozó támogatási webhelyre az alábbi címen: