Súhrn
Pri automatizácii 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ý je možné spustiť v procesnom priestore servera. Môže to zvýšiť celkovú rýchlosť spúšťania aplikácie a vyriešiť problémy, ak server vykoná akciu iba v priebehu volania.
Tento článok ukazuje, ako dynamicky pridať modul VBA do spustenej aplikácie balíka Office z jazyka Visual Basic a potom zavolať makro na vyplnenie hárka v procese.
Ďalšie informácie
Nasledujúca ukážka znázorňuje vloženie modulu kódu do Microsoft Excelu, ale rovnaký postup môžete použiť aj pre Word a PowerPoint, pretože oba obsahujú rovnaký nástroj VBA.
V ukážke sa používa statický textový súbor pre modul kódu, ktorý sa vloží do Excelu. Môžete zvážiť premiestnenie kódu do súboru prostriedkov, ktorý môžete kompilovať do aplikácie a potom v prípade potreby počas spustenia extrahovať do dočasného súboru. Vďaka tomu by bolo projekt lepšie zvládnuteľný na ďalšie rozdeľovanie.
Počnúc balíkom Microsoft Office XP musí používateľ udeliť prístup k objektovému modelu VBA predtým, než začne fungovať automatizačný kód napísaný na manipuláciu s jazykom VBA. Ide o novú funkciu zabezpečenia v balíku Office XP. Ďalšie informácie nájdete v nasledujúcom článku databázy Knowledge Base:
282830 Programový prístup k balíku Office XP projektu VBA je zamietnutý
Kroky na vytvorenie ukážky
Najprv vytvorte nový textový súbor s názvom KbTest.bas (bez prípony .txt). Toto je modul kódu, ktorý vložíme do Excelu za behu.
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 SubUložte textový súbor do adresára C:\KbTest.bas a potom súbor zatvorte.
Spustite Visual Basic a vytvorte štandardný projekt. Predvolene sa vytvorí formulár1.
V ponuke Projekt kliknite na položkuOdkazy a vyberte príslušnú verziu knižnice typov, ktorá vám umožní používať včasnú väzbu programu Excel.
Vyberte napríklad niektorú z týchto možností:
- Pre program Microsoft Office Excel 2007 vyberte knižnicu 12.0.
- Pre program Microsoft Office Excel 2003 vyberte knižnicu 11.0.
- V programe Microsoft Excel 2002 vyberte knižnicu 10.0.
- V programe Microsoft Excel 2000 vyberte knižnicu 9.0.
- V programe Microsoft Excel 97 vyberte knižnicu 8.0.
Pridajte tlačidlo do formulára1 a umiestnite nasledujúci kód do obslužnej rutiny pre udalosť kliknutia tlačidla:
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 SubV Exceli 2002 a novších verziách Excelu je potrebné zapnúť prístup k projektu VBA. Použite jednu z nasledujúcich metód:
- V Exceli 2007 kliknite na tlačidlo Microsoft Office a potom na položku Možnosti programu Excel. Kliknite na položku Centrum dôveryhodnosti a potom kliknite na položku Nastavenie centra dôveryhodnosti. Kliknite na položku Nastavenie makra, kliknutím začiarknite políčko Dôverovať prístupu k objektovému modelu projektu VBA a potom dvakrát kliknite na tlačidlo OK .
- V Exceli 2003 a v starších verziách Excelu 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 programu Visual Basic Project .
Spustenie projektu Visual Basic.
Odkazy
Ďalšie informácie o automatizácii balíka Office z programu Visual Basic nájdete na lokalite Podpora vývoja balíka Office na tejto adrese: