Súhrn
Pri automatizovaní produktu balíka Office z programu Visual Basic môže byť užitočné presunúť časť kódu do modulu microsoft Visual Basic for Applications (VBA), ktorý sa dá spustiť v rámci priestoru procesu na serveri. Môže to zvýšiť celkovú rýchlosť spustenia pre vašu aplikáciu a pomôcť zmierniť problémy, ak server vykoná akciu len vtedy, keď sa uskutočňuje hovor.
Tento článok ukazuje, ako dynamicky pridávať modul VBA do spustených Office z programu Visual Basic a potom vyvolanie makra tak, aby vyplnil hárok počas procesu.
Ďalšie informácie
Nasledujúca ukážka demonštruje vloženie modulu kódu Microsoft Excel, no pre Word a PowerPoint môžete použiť rovnaký postup, pretože oba majú rovnaký nástroj VBA.
Ukážka používa statický textový súbor pre modul kódu, ktorý je vložený do Excel. Možno budete chcieť zvážiť presunutie kódu do súboru zdroja, ktorý môžete kompilovať do aplikácie, a potom v prípade potreby v priebehu priebehu extrahovať do dočasného súboru. V tomto prípade by bolo projekt lepšie spravovateľné na opätovné rozdelenie.
Počnúc Microsoft Office XP musí používateľ udeliť prístup k objektového modelu vba predtým, než bude fungovať akýkoľvek automatizačný kód napísaný na manipuláciu s jazykom VBA. Toto je nová funkcia zabezpečenia s Office XP. Ďalšie informácie nájdete v tomto článku vedomostnej databázy Knowledge Base:
282830 Programový prístup k Office XP VBA Project je odmietnutý
Steps to build the sample
-
Najskôr vytvorte nový textový súbor s názvom KbTest.bas (bez .txt príponou). Toto je modul kódu, ktorý Excel vložiť do skupiny počas priebehu priebehu.
-
Do textového súboru pridajte nasledujúce riadky 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ý súbor do adresára C:\KbTest.bas a potom zatvorte súbor.
-
Začnite Visual Basic a vytvorte štandardný projekt. Formulár1 sa vytvorí predvolene.
-
V ponuke Project na položku Určovania a potom vyberte príslušnú verziu knižnice typov, ktorá umožňuje používať skorú väzbu na Excel.
Vyberte napríklad niektorú z týchto možností:-
V Microsoft Office Excel 2007 vyberte knižnicu 12.0.
-
Ak Microsoft Office Excel 2003, vyberte knižnicu 11.0.
-
Ak Microsoft Excel 2002, vyberte knižnicu 10.0.
-
V Microsoft Excel 2000 vyberte knižnicu 9.0.
-
Ak Microsoft Excel 97, vyberte knižnicu 8.0.
-
-
Pridajte tlačidlo do formulára1 a do obsluhy pre udalosť Kliknutie tlačidla umiestnite nasledujúci 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 -
Pre Excel 2002 a pre novšie verzie balíka Excel je potrebné zapnúť prístup k projektu VBA. Použite jeden z nasledujúcich postupov:
-
V Excel 2007 kliknite na Microsoft Office a potom kliknite na položku Excel Možnosti. Kliknite na položku Centrum dôveryhodnosti a potom na položku Centrum Nastavenia. Kliknite na Nastavenia, kliknutím začiarknite políčko Dôverovať prístupu k objektového modelu projektu VBA a potom dvakrát kliknite na tlačidlo OK.
-
Vo Excel 2003 a v starších verziách balíka Excel ukážte na položku Makro v ponuke Nástroje a potom kliknite na položku Zabezpečenie. V dialógovom okne Zabezpečenie kliknite na kartu Dôveryhodné zdroje a potom kliknutím začiarknite políčko Dôverovať prístupu k Visual Basic Project údajov.
-
-
Spustite Visual Basic projektu.
Odkazy
Ďalšie informácie o automatizácii služieb Office od Visual Basic nájdete na lokalite technickej Office pre vývojovú podporu na nasledujúcej adrese: