Dynamické pridávanie a spúšťanie makra VBA v programe Visual Basic

Vzťahuje sa na
Microsoft Office Professional Edition 2003 Excel 2010

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

  1. 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.

  2. 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
    
    
  3. Uložte textový súbor do adresára C:\KbTest.bas a potom súbor zatvorte.

  4. Spustite Visual Basic a vytvorte štandardný projekt. Predvolene sa vytvorí formulár1.

  5. 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.
  6. 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 Sub
    
    
  7. V 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 .
  8. 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:

http://support.microsoft.com/ofd