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

Aktualisiert: November 2007

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Visual Studio Tools for Office-Projekte und Versionen 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.

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.

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

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

  1. Ö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.

    Hinweis:

    Diese Funktion kann in Word-Vorlagenprojekten nicht verwendet werden.

  2. 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 Visual Studio Tools for Office-Projekts zur Liste der vertrauenswürdigen Speicherorte in den Einstellungen für das Vertrauensstellungscenter für Word oder Excel hinzufügen.

  3. 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.

  4. 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 Tools for Office die ReferenceAssemblyFromVbaProject-Eigenschaft automatisch auf True fest. Weitere Informationen zu dieser Eigenschaft finden Sie unter Aufrufen von Code in Anpassungen auf Dokumentebene von VBA.

    Hinweis:

    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 Tools for Office das VBA-Projekt in diesem Fall nicht im Dokument ändern kann.

  5. 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.

    Nun konfiguriert Visual Studio Tools for Office das Projekt so, dass das VBA-Projekt einen Aufruf in die Assembly durchführen kann. Visual Studio Tools for Office fügt außerdem 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.

  6. 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

  1. Ö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.

    Hinweis:

    Diese Funktion kann in Word-Vorlagenprojekten nicht verwendet werden.

  2. 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 Visual Studio Tools for Office-Projekts zur Liste der vertrauenswürdigen Speicherorte in den Einstellungen für das Vertrauensstellungscenter für Word oder Excel hinzufügen.

  3. 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.

  4. 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)> _
    
  5. Ü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
    
  6. Öffnen Sie das Dokument (für Word) oder das Arbeitsblatt (für Excel) im Designer in Visual Studio.

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

    Hinweis:

    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 Tools for Office das VBA-Projekt in diesem Fall nicht im Dokument ändern kann.

  8. 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.

    Nun konfiguriert Visual Studio Tools for Office das Projekt so, dass das VBA-Projekt die Assembly aufrufen kann. Visual Studio Tools for Office fügt außerdem eine Methode mit dem Namen GetManagedClass zum VBA-Projekt 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.

  9. Erstellen Sie das Projekt.

Siehe auch

Aufgaben

Gewusst wie: Erstellen von Visual Studio Tools for Office-Projekte

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

Erstellen von Office-Projektmappen in Visual Studio

Kombinieren von VBA und Anpassungen auf Dokumentebene

Aufrufen von Code in Anpassungen auf Dokumentebene von VBA