Shrnutí
Při automatizaci Office produktu z Visual Basic může být užitečné přesunout část kódu do modulu Microsoft jazyk Visual Basic for Application (VBA), který může běžet uvnitř prostoru procesu serveru. To může zvýšit celkovou rychlost provádění vaší aplikace a zmírnit problémy, pokud server provádí akci jenom v případě, že je hovor během procesu.
Tento článek ukazuje, jak dynamicky přidat modul JAZYKa VBA do spuštěné Office z Visual Basic a pak zavolat makro a vyplnit list v procesu.
Další informace
Následující ukázka ukazuje vložení modulu kódu do Microsoft Excel, ale můžete použít stejnou techniku pro Word a PowerPoint, protože oba obsahují stejný modul JAZYKa VBA.
Ukázka používá statický textový soubor pro modul kódu, který se vloží do Excel. Můžete zvážit přesunutí kódu do souboru prostředků, který můžete zkompilovat do aplikace, a v případě potřeby extrahovat do dočasného souboru za běhu. Díky tomu bude projekt pro opětovné rozdělení spravitelný.
Počínaje Microsoft Office XP musí uživatel udělit přístup k objektovému modelu jazyka VBA, než bude fungovat jakýkoli kód automatizace napsaný pro práci s jazykem VBA. Toto je nová funkce zabezpečení s Office XP. Další informace najdete v následujícím článku znalostní báze Knowledge Base:
282830 Programový přístup k jazyku VBA Office XP je Project odepřen.
Postup vytvoření ukázky
-
Nejdřív vytvořte nový textový soubor s názvem KbTest.bas (bez .txt souboru). Jedná se o modul kódu, který v Excel za běhu vložíme do aplikace.
-
Do textového souboru přidejte následující řádky kódu:
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 -
Uložte textový soubor do adresáře C:\KbTest.bas a pak soubor zavřete.
-
Začněte Visual Basic a vytvořte standardní projekt. Ve výchozím nastavení se vytvoří formulář1.
-
V nabídce Project klikněte naReferences a vyberte příslušnou verzi knihovny typů, která vám umožní použít časnou vazbu k Excel.
Vyberte třeba jednu z těchto možností:-
V Microsoft Office Excel 2007 vyberte knihovnu 12.0.
-
V Microsoft Office Excel 2003 vyberte knihovnu 11.0.
-
V Microsoft Excel 2002 vyberte knihovnu 10.0.
-
V Microsoft Excel 2000 vyberte knihovnu 9.0.
-
V Microsoft Excel 97 vyberte knihovnu 8.0.
-
-
Přidejte tlačítko do formuláře Form1 a umístěte do obslužné rutiny události Click tlačítka následující kód:
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 -
V Excel 2002 a novějších verzích Excel musíte zapnout přístup k projektu VBA. Použijte některý z následujících postupů:
-
V Excel 2007 klikněte na tlačítko Microsoft Office a potom klikněte na Excel Možnosti. Klikněte na Centrum zabezpečení a potom klikněte na Centrum zabezpečení Nastavení. Klikněte na Nastavení, kliknutím zaškrtněte políčko Důvěřovat přístupu k objektovému modelu projektu VBA a potom dvakrát klikněte na OK.
-
V Excel 2003 a starších verzích Excel přejděte v nabídce Nástroje na Makro a potom klikněte na Zabezpečení. V dialogovém okně Zabezpečení klikněte na kartu Důvěryhodné zdroje a potom kliknutím zaškrtněte políčko Důvěřovat Visual Basic Project přístup.
-
-
Spusťte Visual Basic projekt.
Odkazy
Další informace o automatizaci Office z Visual Basic najdete na webu Office development support na následující adrese: