SO WIRD´S GEMACHT: Erstellen eines Excel-Makros mithilfe der Automatisierung von Visual Basic .NET

Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
303871 HOW TO: Create an Excel Macro by Using Automation from Visual Basic .NET

Zusammenfassung

Dieser Artikel beschreibt Schritt für Schritt, wie Sie Microsoft Excel von Microsoft Visual Basic .NET aus so automatisieren, dass Sie eine Arbeitsmappe erstellen können, die ein neues Makro enthält, das mit einer CommandBar-Schaltfläche (Befehlsleistenschaltfläche) verknüpft ist.

Anleitung zum Erstellen der Visual Basic .NET-Beispielanwendung

  1. Starten Sie Microsoft Visual Basic .NET.
  2. Klicken Sie im Menü Datei auf Neu, und klicken Sie anschließend auf Projekt. Wählen Sie aus den Visual Basic-Projekttypen die Option Windows-Anwendung aus. Form1 wird standardmäßig erstellt.
  3. Fügen Sie die Verweise auf die Microsoft Excel Object Library, die Microsoft Office Object Library und die Microsoft Visual Basic for Applications Extensibility Library hinzu. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Menü Projekt auf Verweis hinzufügen.
    2. Gehen Sie zu dem Eintrag für die Microsoft Excel Object Library auf der Registerkarte COM, und klicken Sie anschließend auf Auswählen.


      Hinweis: Microsoft Office 2003 beinhaltet Primäre Interop-Assemblys (Primary Interop Assemblies = PIAs). In Microsoft Office XP sind zwar keine PIAs enthalten, Sie können diese jedoch bei Bedarf downloaden.
      Weitere Informationen zu Office XP-PIAs finden Sie im folgenden Artikel der Microsoft Knowledge Base:

      328912 INFO: Microsoft Office XP PIAs Are Available for Download

    3. Wählen Sie die Microsoft Visual Basic für Applikationen-Erweiterungsbibliothek (Microsoft Visual Basic for Applications Extensibility Library) aus, und klicken Sie anschließend auf Auswählen.
    4. Klicken Sie im Dialogfeld Verweise hinzufügen auf OK, um Ihre Auswahl zu bestätigen.
  4. Klicken Sie im Menü Ansicht auf Toolbox, um die Toolbox anzeigen zu lassen, und fügen Sie Form1 eine Schaltfläche hinzu.
  5. Doppelklicken Sie auf Button1 (Schaltfläche 1). Beim onClick-Ereignis (Beim Klicken) für Button1 (Schaltfläche 1) wird das Codefenster geöffnet. Fügen Sie oberhalb von "Public Class Form1" (Öffentliche Klasse Form1) die folgende Zeile hinzu:
       Imports Office = Microsoft.Office.Core
  6. Fügen Sie im Codefenster den folgenden Code hinzu:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
    System.EventArgs) Handles Button1.Click
    Dim oExcel As Excel.Application
    Dim oBook As Excel.Workbook
    Dim oModule As VBIDE.VBComponent
    Dim oCommandBar As Office.CommandBar
    Dim oCommandBarButton As Office.CommandBarControl
    Dim sCode As String

    ' Create an instance of Excel, and show it to the user.
    oExcel = New Excel.Application()

    ' Add a workbook.
    oBook = oExcel.Workbooks.Add

    ' Create a new VBA code module.
    oModule = oBook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule)

    sCode = "sub VBAMacro()" & vbCr & _
    " msgbox ""VBA Macro called"" " & vbCr & _
    "end sub"

    ' Add the VBA macro to the new code module.
    oModule.CodeModule.AddFromString(sCode)

    Try
    ' Create a new toolbar, and show it to the user.
    oCommandBar = oExcel.CommandBars.Add("VBAMacroCommandBar")
    oCommandBar.Visible = True

    ' Create a new button on the toolbar.
    oCommandBarButton = oCommandBar.Controls.Add(Office.MsoControlType.msoControlButton)
    ' Assign a macro to the button.
    oCommandBarButton.OnAction = "VBAMacro"
    ' Set the caption of the button.
    oCommandBarButton.Caption = "Call VBAMacro"
    ' Set the icon on the button to a picture.
    oCommandBarButton.FaceId = 2151
    Catch exc As Exception
    MessageBox.Show("VBAMacroCommandBar already exists.", "Error")
    End Try

    oExcel.Visible = True
    ' Set the UserControl property so that Excel does not shut down.
    oExcel.UserControl = True

    ' Release the variables.
    oCommandBarButton = Nothing
    oCommandBar = Nothing
    oModule = Nothing
    oBook = Nothing
    oExcel = Nothing

    ' Force garbage collection.
    GC.Collect()

    End Sub
  7. Fügen Sie ganz oben in "Form1.vb" den folgenden Code ein:
    Imports Office = Microsoft.Office.Core
    Imports Microsoft.Office.Interop
    Imports VBIDE = Microsoft.Vbe.Interop
  8. Drücken Sie die Taste [F5], um das Programm erstellen und dann ausführen zu lassen.
  9. Klicken Sie auf Button1, um Excel zu starten, fügen Sie den Visual Basic für Applikationen (VBA)-Code ein, und fügen Sie anschließend ein CommandBar-Steuerelement (Befehlsleistensteuerelement) hinzu. Klicken Sie auf die Schaltfläche in der Befehlsleiste, um das VBA-Makro ausführen zu lassen.

Zusätzliche Hinweise für Office XP

Microsoft Office XP- und Microsoft Office 2003-Anwendungen verfügen über eine Sicherheitsoption, die den programmatischen Zugriff auf das VBA-Objektmodell ermöglicht. Wenn diese Option auf die Standardeinstellung Off (Aus) festgelegt ist, wird beim Ausführen des Beispielcodes eventuell eine Fehlermeldung angezeigt.
Weitere Informationen zu dieser Option sowie zum Beheben des Fehlers finden Sie in folgendem Artikel der Microsoft Knowledge Base:

282830 PRB: Programmatic Access to Office XP VBA Project Is Denied

Informationsquellen

Weitere Informationen finden Sie in folgendem Artikel der Microsoft Knowledge Base:

194611 Create and Call an Excel Macro Programmatically from VB

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Eigenschaften

Artikelnummer: 303871 – Letzte Überarbeitung: 15.02.2004 – Revision: 1

Feedback