Exemplarische Vorgehensweise: Aufrufen von Code von VBA in einem Visual C#-Projekt

Aktualisiert: November 2007

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Projekte und Versionen von Visual Studio Tools for Office von Microsoft Office.

Projekttyp

  • Projekte auf Dokumentebene

Microsoft Office-Version

  • 2007 Microsoft Office System

Weitere Informationen hierzu finden Sie unter Verfügbare Features nach Anwendung und Projekttyp.

Diese exemplarische Vorgehensweise veranschaulicht das Aufrufen einer Methode in einer Anpassung auf Dokumentebene für Microsoft Office Excel 2007 von VBA (Visual Basic for Applications)-Code in der Arbeitsmappe. Das Verfahren umfasst drei grundlegende Schritte: Hinzufügen einer Methode zur Sheet1-Hostelementklasse, Verfügbarmachen der Methode für VBA-Code in der Arbeitsmappe und anschließend Aufrufen der Methode vom VBA-Code in der Arbeitsmappe.

Obwohl in dieser exemplarischen Vorgehensweise speziell Excel verwendet wird, gelten die Konzepte in dieser exemplarischen Vorgehensweise auch für Projekte auf Dokumentebene für Microsoft Office Word 2007.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

  • Erstellen einer Arbeitsmappe, die VBA-Code enthält

  • Gewähren von Vertrauenswürdigkeit für den Speicherort der Arbeitsmappe mithilfe des Vertrauensstellungscenters in Excel

  • Hinzufügen einer Methode zur Sheet1 Hostelementklasse

  • Extrahieren einer Schnittstelle für die Sheet1 Hostelementklasse

  • Verfügbarmachen der Methode für VBA-Code

  • Aufrufen der Methode von VBA-Code

Hinweis:

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio, die in den folgenden Anweisungen aufgeführt sind, angezeigt. Die von Ihnen verwendete Visual Studio-Edition und die Einstellungen legen diese Elemente fest. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:

  • Visual Studio Tools for Office (eine optionale Komponente von Visual Studio 2008 Professional und Visual Studio Team System).

  • Microsoft Office Excel 2007.

Visual Studio Tools for Office wird standardmäßig mit den aufgeführten Versionen von Visual Studio installiert. Wie Sie überprüfen können, ob die Software installiert ist, erfahren Sie in Installieren von Visual Studio Tools for Office.

Erstellen einer Arbeitsmappe, die VBA-Code enthält

Im ersten Schritt wird eine Arbeitsmappe mit Makros erstellt, die ein einfaches VBA-Makro enthält. Bevor Sie Code in einer Anpassung für VBA verfügbar machen können, muss die Arbeitsmappe bereits VBA-Code enthalten. Andernfalls kann Visual Studio Tools for Office das VBA-Projekt nicht ändern, um VBA-Code zum Aufrufen der Visual Studio Tools for Office-Assembly zu aktivieren.

Wenn Sie bereits über eine Arbeitsmappe mit VBA-Code verfügen, die Sie verwenden möchten, können Sie diesen Schritt überspringen.

So erstellen Sie eine Arbeitsmappe, die VBA-Code enthält

  1. Starten Sie Excel 2007.

  2. Speichern Sie das aktive Dokument mit dem Namen WorkbookWithVBA als Excel-Arbeitsmappe mit Makros (* .xlsm). Speichern Sie es an einem geeigneten Speicherort, z. B. auf dem Desktop.

  3. Klicken Sie in der Multifunktionsleiste auf die Registerkarte Entwickler.

    Hinweis:

    Wenn die Registerkarte Entwickler nicht sichtbar ist, müssen Sie diese zuerst anzeigen. Weitere Informationen finden Sie unter Gewusst wie: Anzeigen der Registerkarte "Entwickler" auf der Multifunktionsleiste.

  4. Klicken Sie in der Gruppe Code auf Visual Basic.

    Der Visual Basic-Editor wird geöffnet.

  5. Doppelklicken Sie im Fenster Projekt auf ThisWorkbook.

    Die Codedatei für das ThisWorkbook-Objekt wird geöffnet.

  6. Fügen Sie der Codedatei den folgenden VBA-Code hinzu. In diesem Code wird eine einfache Funktion definiert, die jedoch wirkungslos bleibt. Mit dieser Funktion soll lediglich sichergestellt werden, dass ein VBA-Projekt in der Arbeitsmappe vorhanden ist. Dies ist für spätere Schritte in dieser exemplarischen Vorgehensweise erforderlich.

    Sub EmptySub()
    End Sub
    
  7. Speichern Sie das Dokument, und beenden Sie Word.

Erstellen des Projekts

Jetzt können Sie ein Projekt auf Dokumentebene für Excel 2007 erstellen, das die bereits erstellte Arbeitsmappe mit Makros verwendet.

So erstellen Sie ein neues Projekt

  1. Starten Sie Visual Studio.

  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  3. Erweitern Sie im Bereich Projekttypen den Eintrag Visual C#, und erweitern Sie dann Office.

  4. Wählen Sie den Ordner 2007 aus.

  5. Wählen Sie im Bereich Vorlagen das Projekt Excel-Arbeitsmappe aus.

  6. Geben Sie im Feld Name die Zeichenfolge CallingCodeFromVBA ein.

  7. Klicken Sie auf OK.

    Der Projekt-Assistent aus Visual Studio Tools for Office wird geöffnet.

  8. Wählen Sie Vorhandenes Dokument kopieren aus, und geben Sie im Feld Vollständiger Pfad zum vorhandenen Dokument den Speicherort der bereits erstellten Arbeitsmappe WorkbookWithVBA an. Wenn Sie eine eigene Arbeitsmappe mit Makros verwenden, geben Sie stattdessen den Speicherort dieser Arbeitsmappe an.

  9. Klicken Sie auf Fertig stellen.

    Visual Studio öffnet die Arbeitsmappe WorkbookWithVBA im Designer und fügt dem Projektmappen-Explorer das Projekt CallingCodeFromVBA hinzu.

Gewähren von Vertrauenswürdigkeit für den Speicherort der Arbeitsmappe

Bevor Sie Code in der Projektmappe für VBA-Code in der Arbeitsmappe verfügbar machen können, müssen Sie VBA in der Arbeitsmappe Vertrauenswürdigkeit für die Ausführung gewähren. Dafür stehen verschiedene Möglichkeiten zur Verfügung. In dieser exemplarischen Vorgehensweise führen Sie diese Aufgabe aus, indem Sie dem Speicherort des Dokuments im Vertrauensstellungscenter in Excel Vertrauenswürdigkeit gewähren.

So gewähren Sie Vertrauenswürdigkeit für den Speicherort der Arbeitsmappe

  1. Starten Sie Excel.

  2. Klicken Sie auf die Schaltfläche für Microsoft Office .

  3. Klicken Sie auf die Schaltfläche Excel-Optionen.

  4. Klicken Sie im Bereich Kategorien auf Vertrauensstellungscenter.

  5. Klicken Sie im Detailbereich auf Einstellungen für das Vertrauensstellungscenter.

  6. Klicken Sie im Bereich Kategorien auf Vertrauenswürdige Speicherorte.

  7. Klicken Sie im Detailbereich auf Neuen Speicherort hinzufügen.

  8. Wechseln Sie im Dialogfeld Vertrauenswürdige Speicherorte von Microsoft Office zum Ordner, der das Projekt CallingCodeFromVBA enthält.

  9. Wählen Sie Unterordner dieses Speicherorts sind ebenfalls vertrauenswürdig aus.

  10. Klicken Sie im Dialogfeld Vertrauenswürdige Speicherorte von Microsoft Office auf OK.

  11. Klicken Sie im Dialogfeld Vertrauensstellungscenter auf OK.

  12. Klicken Sie im Dialogfeld Excel-Optionen auf OK.

  13. Beenden Sie Excel.

Hinzufügen einer Methode zur Sheet1-Klasse

Das VBA-Projekt ist nun eingerichtet, und Sie können der Sheet1-Hostelementklasse eine öffentliche Methode hinzufügen, die Sie vom VBA-Code aufrufen können.

So fügen Sie der Sheet1-Klasse eine Methode hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Sheet1.cs, und klicken Sie dann auf Code anzeigen.

    Die Datei Sheet1.cs wird im Code-Editor geöffnet.

  2. Fügen Sie der Sheet1-Klasse folgenden Code hinzu. Die CreateVstoNamedRange-Methode erstellt ein neues NamedRange-Objekt beim angegebenen Bereich. Mit dieser Methode wird außerdem ein Ereignishandler für das Selected-Ereignis vom NamedRange erstellt. Im weiteren Verlauf dieser exemplarischen Vorgehensweise rufen Sie die CreateVstoNamedRange-Methode von VBA-Code im Dokument auf.

    private Microsoft.Office.Tools.Excel.NamedRange namedRange1;
    
    public void CreateVstoNamedRange(Excel.Range range, string name)
    {
        if (!this.Controls.Contains(name))
        {
            namedRange1 = this.Controls.AddNamedRange(range, name);
            namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler(
                    namedRange1_Selected);
        }
        else
        {
            MessageBox.Show("A named range with this specific name " +
                "already exists on the worksheet.");
        }
    }
    
    private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target)
    {
        MessageBox.Show("This named range was created by Visual Studio " +
            "Tools for Office.");
    }
    
  3. Fügen Sie der Sheet1-Klasse die folgende Methode hinzu. Mit dieser Methode wird die GetAutomationObject-Methode überschrieben, um die aktuelle Instanz der Sheet1-Klasse zurückzugeben.

    protected override object GetAutomationObject()
    {
        return this;
    }
    
  4. Übernehmen Sie die folgenden Attribute vor der ersten Zeile der Sheet1-Klassendeklaration. Diese Attribute machen die Klasse in COM sichtbar, generieren aber keine Klassenschnittstelle.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    

Extrahieren einer Schnittstelle für die Sheet1-Klasse

Bevor Sie die CreateVstoNamedRange-Methode für VBA-Code verfügbar machen können, müssen Sie eine öffentliche Schnittstelle erstellen, die diese Methode definiert, und Sie müssen diese Schnittstelle für COM verfügbar machen.

So extrahieren Sie eine Schnittstelle für die Sheet1-Klasse

  1. Klicken Sie in der Sheet1.cs-Codedatei in der Sheet1-Klasse auf eine beliebige Stelle.

  2. Klicken Sie im Menü Umgestalten auf Schnittstelle extrahieren.

  3. Klicken Sie im Dialogfeld Schnittstelle extrahieren im Feld Öffentliche Member für Schnittstelle auswählen auf den Eintrag für die CreateVstoNamedRange-Methode.

  4. Klicken Sie auf OK.

    Visual Studio generiert eine neue Schnittstelle mit dem Namen ISheet1 und ändert die Definition der Sheet1-Klasse so, dass die ISheet1-Schnittstelle implementiert wird. Visual Studio öffnet außerdem die Datei ISheet1.cs im Code-Editor.

  5. Ersetzen Sie in der Datei ISheet1.cs die ISheet1-Schnittstellendeklaration durch den folgenden Code. Dieser Code macht ISheet1 zu einer öffentlichen Schnittstelle und wendet das ComVisibleAttribute-Attribut an, um die Schnittstelle für COM sichtbar zu machen.

    [System.Runtime.InteropServices.ComVisible(true)]
    public interface ISheet1
    {
        void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name);
    }
    
  6. Erstellen Sie das Projekt.

Verfügbarmachen der Methode für VBA-Code

Zum Verfügbarmachen der CreateVstoNamedRange-Methode für VBA-Code in der Arbeitsmappe legen Sie die ReferenceAssemblyFromVbaProject-Eigenschaft für das Sheet1-Hostelement auf True fest.

So machen Sie die Methode für VBA-Code verfügbar

  1. Doppelklicken Sie im Projektmappen-Explorer auf Sheet1.cs.

    Die Datei WorkbookWithVBA wird im Designer geöffnet und Sheet1 angezeigt.

  2. Wählen Sie im Eigenschaftenfenster die ReferenceAssemblyFromVbaProject-Eigenschaft aus, und ändern Sie den Wert in True.

  3. Klicken Sie in der angezeigten Meldung auf OK.

  4. Erstellen Sie das Projekt.

Aufrufen der Methode von VBA-Code

Sie können jetzt die CreateVstoNamedRange-Methode von VBA-Code in der Arbeitsmappe aufrufen.

Hinweis:

In dieser exemplarischen Vorgehensweise fügen Sie VBA-Code der Arbeitsmappe hinzu, während Sie das Projekt debuggen. Der VBA-Code, den Sie diesem Dokument hinzufügen, wird beim nächsten Erstellen des Projekts überschrieben, da Visual Studio das Dokument im Buildausgabeordner durch eine Kopie des Dokuments aus dem Hauptprojektordner ersetzt. Wenn Sie den VBA-Code speichern möchten, können Sie ihn in das Dokument im Projektordner kopieren. Weitere Informationen finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA.

So rufen Sie die Methode von VBA-Code auf

  1. Drücken Sie F5, um das Projekt auszuführen.

  2. Klicken Sie auf der Registerkarte Entwickler in der Gruppe Code auf Visual Basic.

    Der Visual Basic-Editor wird geöffnet.

  3. Klicken Sie im Menü Einfügen auf Modul.

  4. Fügen Sie dem neuen Modul den folgenden Code hinzu.

    Durch diesen Code wird die CreateTable-Methode der Visual Studio Tools for Office-Assembly aufgerufen. Das Makro greift auf diese Methode zu, indem es die globale GetManagedClass-Methode für den Zugriff auf die Sheet1-Hostelementklasse verwendet, die Sie für VBA-Code verfügbar gemacht haben. Die GetManagedClass-Methode wurde automatisch generiert, als Sie vorher in dieser exemplarischen Vorgehensweise die ReferenceAssemblyFromVbaProject-Eigenschaft festgelegt haben.

    Sub CallVSTOMethod()
        Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1
        Set VSTOSheet1 = GetManagedClass(Sheet1)
        Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange")
    End Sub
    
  5. Drücken Sie F5.

  6. Klicken Sie in der geöffneten Arbeitsmappe auf Zelle A1 in Sheet1. Vergewissern Sie sich, dass das Meldungsfeld angezeigt wird.

  7. Beenden Sie Excel, ohne die Änderungen zu speichern.

Nächste Schritte

Weitere Informationen über das Aufrufen von Code in Visual Studio Tools for Office-Projektmappen von VBA finden Sie in folgenden Themen:

Siehe auch

Aufgaben

Gewusst wie: Verfügbarmachen von Code für VBA in einem Visual Basic-Projekt

Gewusst wie: Verfügbarmachen von Code für VBA in einem Visual C#-Projekt

Exemplarische Vorgehensweise: Aufrufen von Code von VBA in einem Visual Basic-Projekt

Konzepte

Kombinieren von VBA und Anpassungen auf Dokumentebene

Programmieren von Anpassungen auf Dokumentebene