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

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.

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.

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.

    Tipp

    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 Office-Projekts zur Liste der vertrauenswürdigen Speicherorte in den Einstellungen für das Sicherheitscenter 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 Umgestaltung "Schnittstelle extrahieren" (C#).

  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.

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

  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.

    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.

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

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

Konzepte

Aufrufen von Code in Anpassungen auf Dokumentebene von VBA

Weitere Ressourcen

Entwerfen und Erstellen von Office-Lösungen

Kombinieren von VBA und Anpassungen auf Dokumentebene