Ö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: