Exemplarische Vorgehensweise: Aufrufen von Code von VBA in einem Visual C#-Projekt
Diese exemplarische Vorgehensweise veranschaulicht das Aufrufen einer Methode in einer Anpassung auf Dokumentebene für Microsoft Office Excel 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.
Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokumentebene für die folgenden Anwendungen: Excel 2013 und Excel 2010, Word 2013 und Word 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
Obwohl in dieser exemplarischen Vorgehensweise speziell Excel verwendet wird, gelten die Konzepte in dieser exemplarischen Vorgehensweise auch für Projekte auf Dokumentebene für Word.
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 Sicherheitscenters 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 angezeigt als die in den folgenden Anweisungen aufgeführten.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:
-
Eine Version von Visual Studio 2012, die die Microsoft Office-Entwicklungstools einschließt. Weitere Informationen finden Sie unter [Konfigurieren eines Computers zum Entwickeln von Office-Lösungen](bb398242\(v=vs.110\).md).
- Excel 2013 oder Excel 2010.
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 das VBA-Projekt nicht ändern, um VBA-Code zum Aufrufen der Anpassungsassembly 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
Starten Sie Excel.
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.
Klicken Sie im Menüband 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.
Klicken Sie in der Gruppe Code auf Visual Basic.
Der Visual Basic-Editor wird geöffnet.
Doppelklicken Sie im Fenster Projekt auf ThisWorkbook.
Die Codedatei für das ThisWorkbook-Objekt wird geöffnet.
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
Speichern Sie das Dokument, und beenden Sie Excel.
Erstellen des Projekts
Jetzt können Sie ein Projekt auf Dokumentebene für Excel erstellen, das die bereits erstellte Arbeitsmappe mit Makros verwendet.
So erstellen Sie ein neues Projekt
Starten Sie Visual Studio.
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Erweitern Sie im Vorlagenbereich den Visual C# und dann Office/SharePoint.
Wählen Sie den Knoten Office-Add-Ins aus.
In der Liste der Projektvorlagen, aktivieren Sie das Excel 2010-Arbeitsmappe oder Excel 2013-Arbeitsmappe Projekt aus.
Geben Sie im Feld Name die Zeichenfolge CallingCodeFromVBA ein.
Klicken Sie auf OK.
Der Projekt-Assistent aus Visual Studio Tools for Office wird geöffnet.
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.
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 Sicherheitscenter in Excel Vertrauenswürdigkeit gewähren.
So gewähren Sie Vertrauenswürdigkeit für den Speicherort der Arbeitsmappe
Starten Sie Excel.
Klicken Sie auf die Registerkarte Datei.
Klicken Sie auf die Schaltfläche Excel-Optionen.
Klicken Sie im Bereich Kategorien auf Sicherheitscenter.
Klicken Sie im Detailbereich auf Einstellungen für das Sicherheitscenter.
Klicken Sie im Bereich Kategorien auf Vertrauenswürdige Speicherorte.
Klicken Sie im Detailbereich auf Neuen Speicherort hinzufügen.
Wechseln Sie im Dialogfeld Vertrauenswürdige Speicherorte von Microsoft Office zum Ordner, der das Projekt "CallingCodeFromVBA" enthält.
Wählen Sie Unterordner dieses Speicherorts sind ebenfalls vertrauenswürdig aus.
Klicken Sie im Dialogfeld Vertrauenswürdige Speicherorte von Microsoft Office auf OK.
Klicken Sie im Dialogfeld Sicherheitscenter auf OK.
Klicken Sie im Dialogfeld Excel-Optionen auf OK.
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
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.
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."); }
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; }
Ü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
Klicken Sie in der Sheet1.cs-Codedatei in der Sheet1-Klasse auf eine beliebige Stelle.
Klicken Sie im Menü Umgestalten auf Schnittstelle extrahieren.
Klicken Sie im Dialogfeld Schnittstelle extrahieren im Feld Öffentliche Member für Schnittstelle auswählen auf den Eintrag für die CreateVstoNamedRange-Methode.
Klicken Sie auf OK.
Visual Studio generiert die neue Schnittstelle ISheet1 und ändert die Definition der Sheet1-Klasse, damit die ISheet1-Schnittstelle implementiert wird.Visual Studio öffnet außerdem die Datei ISheet1.cs im Code-Editor.
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); }
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
Doppelklicken Sie im Projektmappen-Explorer auf Sheet1.cs.
Die Datei WorkbookWithVBA wird im Designer geöffnet und Sheet1 angezeigt.
Wählen Sie im Eigenschaftenfenster die ReferenceAssemblyFromVbaProject-Eigenschaft aus, und ändern Sie den Wert in True.
Klicken Sie in der angezeigten Meldung auf OK.
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 Kombinieren von VBA und Anpassungen auf Dokumentebene. |
So rufen Sie die Methode von VBA-Code auf
Drücken Sie F5, um das Projekt auszuführen.
Klicken Sie auf der Registerkarte Entwickler in der Gruppe Code auf Visual Basic.
Der Visual Basic-Editor wird geöffnet.
Klicken Sie im Menü Einfügen auf Modul.
Fügen Sie dem neuen Modul den folgenden Code hinzu.
Durch diesen Code wird die CreateTable-Methode der Anpassungsassembly 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
Drücken Sie F5.
Klicken Sie in der geöffneten Arbeitsmappe auf Zelle A1 in Sheet1.Vergewissern Sie sich, dass das Meldungsfeld angezeigt wird.
Beenden Sie Excel, ohne die Änderungen zu speichern.
Nächste Schritte
Weitere Informationen über das Aufrufen von Code in Office-Lösungen von VBA finden Sie in folgenden Themen:
Aufrufen von Code in einem Hostelement in einer Visual Basic-Anpassung von VBA.Dieser Prozess unterscheidet sich vom Visual C#-Prozess.Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Aufrufen von Code von VBA in einem Visual Basic-Projekt.
Aufrufen von Code in einem Add-In auf Anwendungsebene von VBA.Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Aufrufen von Code in einem Add-In auf Anwendungsebene von VBA.
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