Gewusst wie: Verfügbarmachen von Code für VBA in einem Visual Basic-Projekt
Sie können Code in einem Visual Basic-Projekt für VBA (Visual Basic for Applications)-Code verfügbar machen, wenn diese beiden Codetypen miteinander interagieren sollen.
Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokumentebene für die folgenden Anwendungen: Excel 2007 und Excel 2010, Word 2007 und Word 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
Der Visual Basic-Prozess unterscheidet sich vom Visual C#-Prozess. Weitere Informationen finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA und unter Gewusst wie: Verfügbarmachen von Code für VBA in einem Visual C#-Projekt.
Der Prozess für Code in einer Hostelementklasse unterscheidet sich von dem Prozess für Code in anderen Klassen:
Verfügbarmachen von Code in einer Hostelementklasse
Verfügbarmachen von Code, der sich nicht in einer Hostelementklasse befindet
Eine entsprechende Videodemo finden Sie unter How Do I: Call VSTO Code from VBA?.
Verfügbarmachen von Code in einer Hostelementklasse
Zum Aktivieren von VBA-Code für das Aufrufen von Visual Basic-Code in einer Hostelementklasse legen Sie die EnableVbaCallers-Eigenschaft des Hostelements auf True fest.
Eine exemplarische Vorgehensweise, die zeigt, wie eine Methode einer Hostelementklasse verfügbar gemacht und dann von VBA aufgerufen wird, finden Sie unter Exemplarische Vorgehensweise: Aufrufen von Code von VBA in einem Visual Basic-Projekt. Weitere Informationen zu Hostelementen finden Sie unter Übersicht über Hostelemente und Hoststeuerelemente.
So machen Sie Code in einem Hostelement für VBA verfügbar
Öffnen oder erstellen Sie ein Visual Basic-Projekt auf Dokumentebene auf der Basis eines Word-Dokuments, einer Excel-Arbeitsmappe oder einer Excel-Vorlage, die Makros unterstützen und bereits VBA-Code enthalten.
Weitere Informationen über die Dokumentdateiformate, die Makros unterstützen, finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA.
Tipp
Diese Funktion kann in Word-Vorlagenprojekten nicht verwendet werden.
Stellen Sie sicher, dass der VBA-Code im Dokument ausgeführt werden darf, ohne dass der Benutzer Makros aktivieren muss. Sie können den auszuführenden VBA-Code als vertrauenswürdig festlegen, indem Sie den Speicherort des Office-Projekts zur Liste der vertrauenswürdigen Speicherorte in den Einstellungen für das Sicherheitscenter für Word oder Excel hinzufügen.
Fügen Sie die Eigenschaft, die Methode oder das Ereignis, die bzw. das Sie für VBA verfügbar machen möchten, zu einer der Hostelementklassen im Projekt hinzu, und deklarieren Sie den neuen Member als Public. Der Name der Klasse hängt von der Anwendung ab:
In einem Word-Projekt ist der Name der Hostelementklasse standardmäßig ThisDocument.
In einem Excel-Projekt werden für Hostelementklassen standardmäßig die Namen ThisWorkbook, Sheet1, Sheet2 und Sheet3 verwendet.
Legen Sie die EnableVbaCallers-Eigenschaft für das Hostelement auf True fest. Diese Eigenschaft ist im Eigenschaftenfenster verfügbar, wenn das Hostelement im Designer geöffnet ist.
Nachdem Sie diese Eigenschaft festgelegt haben, legt Visual Studio die ReferenceAssemblyFromVbaProject-Eigenschaft automatisch auf True fest. Weitere Informationen zu dieser Eigenschaft finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA.
Tipp
Wenn die Arbeitsmappe oder das Dokument keinen VBA-Code enthält oder der VBA-Code im Dokument nicht vertrauenswürdig ist und deshalb nicht ausgeführt werden kann, wird beim Festlegen der EnableVbaCallers-Eigenschaft auf True eine Fehlermeldung angezeigt. Der Grund hierfür ist, dass Visual Studio das VBA-Projekt in diesem Fall nicht im Dokument ändern kann.
Klicken Sie in der angezeigten Meldung auf OK. Diese Meldung erinnert Sie daran, dass, wenn Sie VBA-Code zur Arbeitsmappe oder zum Dokument hinzufügen, während das Projekt von Visual Studio ausgeführt wird, der VBA-Code verloren geht, wenn Sie das Projekt das nächste Mal erstellen. Das liegt daran, dass das Dokument im Buildausgabeordner jedes Mal überschrieben wird, wenn Sie das Projekt erstellen.
Jetzt konfiguriert Visual Studio das Projekt so, dass das VBA-Projekt die Assembly aufrufen kann. Visual Studio fügt auch eine Eigenschaft mit dem Namen CallVSTOAssembly zum Modul ThisDocument, ThisWorkbook, Sheet1, Sheet2 oder Sheet3 im VBA-Projekt hinzu. Sie können diese Eigenschaft verwenden, um auf öffentliche Member der Klasse zuzugreifen, die Sie für VBA verfügbar gemacht haben. Weitere Informationen finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA.
Erstellen Sie das Projekt.
Verfügbarmachen von Code, der sich nicht in einer Hostelementklasse befindet
Zum Aktivieren von VBA-Code für das Aufrufen von Visual Basic-Code, der sich nicht in einer Hostelementklasse befindet, bearbeiten Sie den Code, sodass er für VBA sichtbar ist.
So machen Sie Code, der sich nicht in einer Hostelementklasse befindet, für VBA verfügbar
Öffnen oder erstellen Sie ein Visual Basic-Projekt auf Dokumentebene auf der Basis eines Word-Dokuments, einer Excel-Arbeitsmappe oder einer Excel-Vorlage, die Makros unterstützen und bereits VBA-Code enthalten.
Weitere Informationen über die Dokumentdateiformate, die Makros unterstützen, finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA.
Tipp
Diese Funktion kann in Word-Vorlagenprojekten nicht verwendet werden.
Stellen Sie sicher, dass der VBA-Code im Dokument ausgeführt werden darf, ohne dass der Benutzer Makros aktivieren muss. Sie können den auszuführenden VBA-Code als vertrauenswürdig festlegen, indem Sie den Speicherort des Office-Projekts zur Liste der vertrauenswürdigen Speicherorte in den Einstellungen für das Sicherheitscenter für Word oder Excel hinzufügen.
Fügen Sie den Member, den Sie für VBA verfügbar machen möchten, zu einer öffentlichen Klasse im Projekt hinzu, und deklarieren Sie den neuen Member als public.
Wenden Sie das folgende ComVisibleAttribute-Attribut und ComClassAttribute-Attribut für die Klasse an, die Sie für VBA verfügbar machen. Diese Attribute machen die Klasse für VBA sichtbar.
<Microsoft.VisualBasic.ComClass()> _ <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Überschreiben Sie die GetAutomationObject-Methode einer Hostelementklasse im Projekt, um eine Instanz der Klasse zurückzugeben, die Sie für VBA verfügbar machen. Im folgenden Code wird angenommen, dass Sie eine Klasse mit dem Namen DocumentUtilities für VBA verfügbar machen.
Protected Overrides Function GetAutomationObject() As Object Return New DocumentUtilities() End Function
Öffnen Sie das Dokument (für Word) oder das Arbeitsblatt (für Excel) im Designer in Visual Studio.
Wählen Sie im Eigenschaftenfenster die ReferenceAssemblyFromVbaProject-Eigenschaft aus, und ändern Sie den Wert in True.
Tipp
Wenn die Arbeitsmappe oder das Dokument noch keinen VBA-Code enthält oder der VBA-Code im Dokument nicht vertrauenswürdig ist und deshalb nicht ausgeführt werden kann, wird beim Festlegen der ReferenceAssemblyFromVbaProject-Eigenschaft auf True eine Fehlermeldung angezeigt. Der Grund hierfür ist, dass Visual Studio das VBA-Projekt in diesem Fall nicht im Dokument ändern kann.
Klicken Sie in der angezeigten Meldung auf OK. Diese Meldung erinnert Sie daran, dass, wenn Sie VBA-Code zur Arbeitsmappe oder zum Dokument hinzufügen, während das Projekt von Visual Studio ausgeführt wird, der VBA-Code verloren geht, wenn Sie das Projekt das nächste Mal erstellen. Das liegt daran, dass das Dokument im Buildausgabeordner jedes Mal überschrieben wird, wenn Sie das Projekt erstellen.
Jetzt konfiguriert Visual Studio das Projekt so, dass das VBA-Projekt die Assembly aufrufen kann. Visual Studio fügt dem VBA-Projekt außerdem eine Methode mit dem Namen GetManagedClass hinzu. Sie können diese Methode von jedem beliebigen Punkt im VBA-Projekt aufrufen, um auf die Klasse zuzugreifen, die für VBA verfügbar gemacht wurde. Weitere Informationen finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA.
Erstellen Sie das Projekt.
Siehe auch
Aufgaben
Gewusst wie: Erstellen von Office-Projekten in Visual Studio
Exemplarische Vorgehensweise: Aufrufen von Code von VBA in einem Visual Basic-Projekt
Gewusst wie: Verfügbarmachen von Code für VBA in einem Visual C#-Projekt
Konzepte
Aufrufen von Code in Anpassungen auf Dokumentebene von VBA