Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Anleitung wird veranschaulicht, wie Sie eine Methode in einer Dokumentenanpassung für Microsoft Office Excel mit VBA-Code (Visual Basic for Applications) in der Arbeitsmappe aufrufen. Die Prozedur umfasst drei grundlegende Schritte: Hinzufügen einer Methode zur Sheet1 Host-Elementklasse, Zugänglichmachen der Methode für VBA-Code in der Arbeitsmappe, und danach Aufrufen der Methode aus VBA-Code in der Arbeitsmappe.
Gilt für: Die Informationen in diesem Thema gelten für Projekte auf Dokumentebene für Excel und Word. Weitere Informationen finden Sie unter Funktionen verfügbar nach Office-Anwendung und Projekttyp.
Obwohl diese exemplarische Vorgehensweise Excel speziell verwendet, gelten die konzepte, die durch die exemplarische Vorgehensweise veranschaulicht werden, 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.
Dem Speicherort der Arbeitsmappe mithilfe des Trust Centers in Excel vertrauen.
Hinzufügen einer Methode zur
Sheet1Hostelementklasse.Extraktion einer Schnittstelle für die
Sheet1Host-Item-Klasse.Verfügbarmachen der Methode für VBA-Code.
Aufrufen der Methode aus 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. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren von Visual Studio-IDE.
Voraussetzungen
Sie benötigen die folgenden Komponenten, um diese Schritt-für-Schritt-Anleitung abzuschließen.
Eine Version von Visual Studio, die die Microsoft Office-Entwicklertools enthält. Weitere Informationen finden Sie unter Konfigurieren eines Computers zum Entwickeln von Office-Lösungen.
Microsoft Excel
Erstellen einer Arbeitsmappe mit VBA-Code
Der erste Schritt besteht darin, eine Arbeitsmappe mit Makros zu erstellen, 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 verfügen, die VBA-Code enthält, den 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 als Excel-Macro-Enabled Arbeitsmappe (*.xlsm) mit dem Namen WorkbookWithVBA. Speichern Sie es an einem praktischen Speicherort, z. B. auf dem Desktop.
Klicken Sie im Menüband auf die Registerkarte " Entwicklertools ".
Hinweis
Wenn die Registerkarte " Entwicklertools " nicht angezeigt wird, müssen Sie sie zuerst anzeigen. Weitere Informationen finden Sie unter How to: Show the developer tab on the ribbon.
Klicken Sie in der Gruppe "Code " auf Visual Basic.
Der Visual Basic-Editor wird geöffnet.
Doppelklicken Sie im Projektfenster auf ThisWorkbook.
Die Codedatei für das
ThisWorkbookObjekt wird geöffnet.Fügen Sie der Codedatei den folgenden VBA-Code hinzu. Dieser Code definiert eine einfache Funktion, die nichts bewirkt. Der einzige Zweck dieser Funktion besteht darin, sicherzustellen, dass ein VBA-Projekt in der Arbeitsmappe vorhanden ist. Dies ist für spätere Schritte in dieser exemplarischen Vorgehensweise erforderlich.
Sub EmptySub() End SubSpeichern Sie das Dokument, und beenden Sie Excel.
Erstelle das Projekt
Jetzt können Sie ein Projekt auf Dokumentebene für Excel erstellen, das die zuvor 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 Visual C#, und erweitern Sie dann Office/SharePoint.
Wählen Sie den Knoten "Office-Add-Ins" aus.
Wählen Sie in der Liste der Projektvorlagen das Excel 2010-Arbeitsmappen- oder Excel 2013-Arbeitsmappenprojekt aus.
Geben Sie im Feld "Name " den Namen "CallingCodeFromVBA" ein.
Klicke auf OK.
Der Projektassistent von Visual Studio Tools für Office wird geöffnet.
Wählen Sie Vorhandenes Dokument kopieren aus, und geben Sie im Feld "Vollständiger Pfad des vorhandenen Dokuments" den Speicherort der Arbeitsmappe WorkbookWithVBA an, die Sie zuvor erstellt haben. Wenn Sie ihre eigene Arbeitsmappe mit Makros verwenden, geben Sie stattdessen den Speicherort dieser Arbeitsmappe an.
Klicken Sie auf Fertig stellen.
Visual Studio öffnet die WorkbookWithVBA-Arbeitsmappe im Designer und fügt das CallingCodeFromVBA-Projekt dem Projektmappen-Explorer hinzu.
Dem Speicherort der Arbeitsmappe vertrauen.
Bevor Sie Code in Ihrer Lösung für VBA-Code in der Arbeitsmappe freigeben können, müssen Sie VBA in der Arbeitsmappe vertrauen, damit es ausgeführt werden kann. Hierfür gibt es mehrere Möglichkeiten. In dieser exemplarischen Vorgehensweise führen Sie diese Aufgabe aus, indem Sie dem Speicherort der Arbeitsmappe im Trust Center in Excel vertrauen.
Dem Speicherort der Arbeitsmappe vertrauen
Starten Sie Excel.
Klicken Sie auf die Registerkarte "Datei ".
Klicken Sie auf die Schaltfläche "Excel-Optionen ".
Klicken Sie im Bereich "Kategorien" auf "Trust Center".
Klicken Sie im Detailbereich auf "Einstellungen für das Trust Center".
Klicken Sie im Bereich "Kategorien" auf " Vertrauenswürdige Speicherorte".
Klicken Sie im Detailbereich auf "Neuen Speicherort hinzufügen".
Navigieren Sie im Dialogfeld "Vertrauenswürdiger Speicherort von Microsoft Office " zu dem Ordner, der das CallingCodeFromVBA-Projekt enthält.
Die Auswahl von Unterordnern dieses Speicherorts ist ebenfalls vertrauenswürdig.
Klicken Sie im Dialogfeld " Vertrauenswürdiger Speicherort von Microsoft Office " auf "OK".
Klicken Sie im Dialogfeld "Trust Center " auf "OK".
Klicken Sie im Dialogfeld "Excel-Optionen " auf "OK".
Beenden Sie Excel.
Hinzufügen einer Methode zur Sheet1-Klasse
Nachdem das VBA-Projekt eingerichtet ist, fügen Sie der Sheet1 Hostelementklasse eine öffentliche Methode hinzu, die Sie aus 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 Sheet1.cs Datei wird im Code-Editor geöffnet.
Fügen Sie der Klasse den folgenden Code hinzu
Sheet1. DieCreateVstoNamedRangeMethode erstellt ein neues NamedRange Objekt im angegebenen Bereich. Diese Methode erstellt auch einen Ereignishandler für das Selected Ereignis des NamedRange. Später in dieser Anleitung rufen Sie dieCreateVstoNamedRange-Methode aus dem 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üge der
Sheet1-Klasse die folgende Methode hinzu. Diese Methode setzt die GetAutomationObject Methode außer Kraft, um die aktuelle Instanz derSheet1Klasse zurückzugeben.protected override object GetAutomationObject() { return this; }Wenden Sie die folgenden Attribute vor der ersten Zeile der
Sheet1Klassendeklaration an. Diese Attribute machen die Klasse für COM sichtbar, ohne jedoch eine Klassenschnittstelle zu generieren.[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 codedatei Sheet1.cs auf eine beliebige Stelle in der
Sheet1Klasse.Klicken Sie im Menü «Umgestalten» auf «Interface extrahieren».
Klicken Sie im Dialogfeld "Schnittstelle extrahieren" im Feld "Öffentliche Mitglieder auswählen, um Schnittstelle zu bilden" auf den Eintrag für die
CreateVstoNamedRangeMethode.Klicke auf OK.
Visual Studio generiert eine neue Schnittstelle mit dem Namen
ISheet1und ändert die Definition derSheet1Klasse so, dass sie dieISheet1Schnittstelle implementiert. Visual Studio öffnet auch die ISheet1.cs-Datei im Code-Editor.Ersetzen Sie in der datei ISheet1.cs die
ISheet1Schnittstellendeklaration durch den folgenden Code. Dieser Code macht dieISheet1Schnittstelle öffentlich und wendet das ComVisibleAttribute Attribut an, um die Schnittstelle auf COM sichtbar zu machen.[System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); }Projekt erstellen.
Verfügbarmachen der Methode für VBA-Code
Um die CreateVstoNamedRange Methode für VBA-Code in der Arbeitsmappe zugänglich zu machen, legen Sie die Eigenschaft ReferenceAssemblyFromVbaProject für das Sheet1 Hostelement auf True fest.
So machen Sie die Methode für VBA-Code verfügbar
Doppelklicken Sie im Solution Explorer auf Sheet1.cs.
Die WorkbookWithVBA-Datei wird im Designer geöffnet, wobei Sheet1 sichtbar ist.
Wählen Sie im Eigenschaftenfenster die Eigenschaft "ReferenceAssemblyFromVbaProject " aus, und ändern Sie den Wert in "True".
Klicken Sie in der angezeigten Nachricht auf "OK ".
Projekt erstellen.
Aufrufen der Methode aus VBA-Code
Sie können die CreateVstoNamedRange Methode jetzt aus VBA-Code in der Arbeitsmappe aufrufen.
Hinweis
In dieser exemplarischen Vorgehensweise fügen Sie der Arbeitsmappe VBA-Code 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 Dokumentebenenanpassungen.
So rufen Sie die Methode aus VBA-Code auf
Drücken Sie F5 , um Ihr Projekt auszuführen.
Klicken Sie auf der Registerkarte " Entwicklertools " 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.
Dieser Code ruft die
CreateTableMethode in der Anpassungsassembly auf. Das Makro greift mithilfe der globalenGetManagedClass-Methode auf diese Methode zu, um auf das für VBA-Code freigegebeneSheet1Host-Klassenobjekt zuzugreifen. DieGetManagedClassMethode wurde automatisch generiert, wenn Sie die ReferenceAssemblyFromVbaProject-Eigenschaft weiter oben in dieser exemplarischen Vorgehensweise festlegen.Sub CallVSTOMethod() Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1 Set VSTOSheet1 = GetManagedClass(Sheet1) Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange") End SubDrücken Sie F5.
Klicken Sie in der geöffneten Arbeitsmappe auf Zelle A1 in Sheet1. Stellen Sie sicher, dass das Meldungsfeld angezeigt wird.
Beenden Sie Excel, ohne Ihre Änderungen zu speichern.
Nächste Schritte
Weitere Informationen zum Aufrufen von Code in Office-Lösungen aus VBA finden Sie in den folgenden Themen:
Aufrufen von Code in einem Hostelement in einer Visual Basic-Anpassung aus VBA Dieser Prozess unterscheidet sich vom Visual C#-Prozess. Weitere Informationen finden Sie unter Walkthrough: Call code from VBA in a Visual Basic project.
Aufrufen von Code in einem VSTO-Add-In aus VBA. Weitere Informationen finden Sie unter Anleitung: Ausführen von Code in einem VSTO-Add-In von VBA aus.
Verwandte Inhalte
- Kombinieren von VBA- und Dokumentebenenanpassungen
- Programmanpassungen auf Dokumentebene
- Vorgehensweise: Verfügbarmachen von Code für VBA in einem Visual Basic-Projekt
- Vorgehensweise: Verfügbarmachen von Code für VBA in einem Visual C#-Projekt
- Exemplarische Vorgehensweise: Aufrufen von Code aus VBA in einem Visual Basic-Projekt