Dynamisches Hinzufügen und Ausführen eines VBA-Makros aus Visual Basic

Gilt für: Microsoft Office Excel 2007Microsoft Office Professional Edition 2003Microsoft Office Excel 2003

Zusammenfassung


Wenn ein Office-Produkt von Visual Basic automatisieren, kann es hilfreich sein zu Teil des Codes in einem Microsoft Visual Basic for Applications (VBA)-Modul, das im Prozessraum des Servers ausgeführt werden kann. Dadurch kann ausführungsgeschwindigkeit Ihrer Anwendung verbessern und Probleme zu verringern, wenn der Server nur eine Aktion führt, wenn im Prozess aufgerufen wird.

Dieser Artikel veranschaulicht, wie einem VBA-Modul aus Visual Basic dynamisch zu einer laufenden Office-Anwendung hinzufügen und das Makro zum Füllen eines Tabelle Prozess aufrufen.

Weitere Informationen


Das folgende Beispiel veranschaulicht das Einfügen eines Codemoduls in Microsoft Excel, jedoch können Sie das gleiche Verfahren für Word und PowerPoint denn beide dasselbe VBA-Modul.

Das Beispiel verwendet eine statische Textdatei für das in Excel einzufügende Codemodul. Sie sollten erwägen, den Code in eine Ressourcendatei, die in Ihre Anwendung kompilieren und extrahieren Sie Sie in eine temporäre Datei zur Laufzeit benötigt. Dieses machen Projekt erneut leichter.

Ab Microsoft Office XP muss Benutzer gewähren Zugriff auf das VBA-Objektmodell bevor Automatisierungscode VBA bearbeiten funktionieren. Dies ist eine neue Sicherheitsfunktion in Office XP. Weitere Informationen finden Sie in der Microsoft Knowledge Base:
282830 den programmgesteuerten Zugriff auf Office XP VBA-Projekt verweigert

Schritte zum Erstellen des Beispiels

  1. Erstellen Sie zunächst eine neue Textdatei namens KbTest.bas (ohne Erweiterung). Dies ist das Codemodul, das zur Laufzeit in Excel eingefügt wird.
  2. Fügen Sie in der Textdatei die folgenden Codezeilen hinzu:
       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. Speichern der Datei im Verzeichnis C:\KbTest.bas, und schließen Sie Sie.
  4. Starten Sie Visual Basic und erstellen Sie ein standard-Projekt. Form1 wird standardmäßig erstellt.
  5. Im Menü Projekt aufVerweise, und wählen Sie die entsprechende Version der Typbibliothek die frühe Bindung an Excel ermöglicht.

    Wählen Sie z. B. die folgenden:
    • Wählen Sie für Microsoft Office Excel 2007 12.0 Bibliothek.
    • Wählen Sie für Microsoft Office Excel 2003 die Bibliothek 11.0.
    • Wählen Sie für Microsoft Excel 2002 10.0 Library.
    • Wählen Sie für Microsoft Excel 2000 9.0 Library.
    • Wählen Sie für Microsoft Excel 97 die Bibliothek 8.0.
  6. Form1 eine Schaltfläche hinzu, und fügen Sie folgenden Code im Ereignishandler für das Click -Ereignis der Schaltfläche:
       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. Excel 2002 und späteren Versionen von Excel müssen Sie Zugriff auf das VBA-Projekt aktivieren. Verwenden Sie hierzu eine der folgenden Methoden:
    • Klicken Sie in Excel 2007 auf die Microsoft Office-Schaltfläche, und klicken Sie dann auf Excel-Optionen. Klicken Sie auf Trust Centerund klicken Sie Trust Center. Klicken Sie Makro, aktivieren Sie das Kontrollkästchen Zugriff auf das VBA-Projektobjektmodell vertrauen , und klicken Sie zweimal auf OK .
    • Zeigen Sie in Excel 2003 und früheren Versionen von Excel im Menü Extras auf Makro , und klicken Sie dann auf Sicherheit. Im Dialogfeld Sicherheit auf der Registerkarte Vertrauenswürdige Quellen aktivieren Sie das Kontrollkästchen Zugriff auf Visual Basic-Projekt vertrauen
  8. Führen Sie Visual Basic-Projekt.

Referenzen


Weitere Informationen zur Automatisierung von Office in Visual Basic finden Sie unter Office Development-Website unter folgender Adresse: