Gewusst wie: Verfügbarmachen von Code für 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.

Sie können Code in einem Visual C#-Projekt für VBA (Visual Basic for Applications)-Code verfügbar machen, wenn diese beiden Codetypen miteinander interagieren sollen.

Der Visual C#-Prozess unterscheidet sich vom Visual Basic-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 Basic-Projekt.

Verfügbarmachen von Code in einem Visual C#-Projekt

Zum Aktivieren von VBA-Code für das Aufrufen von Code in einem Visual C#-Projekt ändern Sie den Code, sodass er in COM angezeigt wird, und legen Sie dann im Designer die ReferenceAssemblyFromVbaProject-Eigenschaft auf True fest.

Eine exemplarische Vorgehensweise, die das Aufrufen einer Methode in einem Visual C#-Projekt von VBA veranschaulicht, finden Sie unter Exemplarische Vorgehensweise: Aufrufen von Code von VBA in einem Visual C#-Projekt.

So machen Sie Code in einem Visual C#-Projekt für VBA verfügbar

  1. Öffnen oder erstellen Sie ein 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 aufgefordert wird, Makros zu aktivieren. 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. Übernehmen Sie das folgende ComVisibleAttribute-Attribut und ClassInterfaceAttribute-Attribut für die Klasse, die Sie für VBA verfügbar machen. 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)]
    
  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:

    • Wenn Sie eine Hostelementklasse für VBA verfügbar machen, überschreiben Sie die zu dieser Klasse gehörende GetAutomationObject-Methode, und geben Sie die aktuelle Instanz der Klasse zurück.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Wenn Sie eine Klasse für VBA verfügbar machen, die kein Hostelement ist, überschreiben Sie die GetAutomationObject-Methode eines beliebigen Hostelements im Projekt, und geben Sie eine Instanz der Klasse zurück, die kein Hostelement ist. Im folgenden Code wird beispielsweise angenommen, dass Sie eine Klasse mit dem Namen DocumentUtilities für VBA verfügbar machen.

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

    Weitere Informationen zu Hostelementen finden Sie unter Übersicht über Hostelemente und Hoststeuerelemente.

  6. Extrahieren Sie eine Schnittstelle aus der Klasse, die Sie für VBA verfügbar machen. Wählen Sie im Dialogfeld Schnittstelle extrahieren die öffentlichen Member aus, die Sie in die Schnittstellendeklaration aufnehmen möchten. Weitere Informationen finden Sie unter Gewusst wie: Umgestalten von Code mit "Schnittstelle extrahieren".

  7. Fügen Sie das public-Schlüsselwort zur Schnittstellendeklaration hinzu.

  8. Machen Sie die Schnittstelle in COM sichtbar, indem Sie das folgende ComVisibleAttribute-Attribut zur Schnittstelle hinzufügen.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Öffnen Sie das Dokument (für Word) oder das Arbeitsblatt (für Excel) im Designer in Visual Studio.

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

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

  11. 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. Der Grund hierfür ist, dass das Dokument im Buildausgabeordner jedes Mal überschrieben wird, wenn Sie das Projekt erstellen.

    Nun konfiguriert Visual Studio Tools for Office das Projekt, sodass 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.

  12. 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 C#-Projekt

Gewusst wie: Verfügbarmachen von Code für VBA in einem Visual Basic-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