Freigeben über


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

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

Der Visual C#-Prozess unterscheidet sich vom Visual Basic-Prozess. Weitere Informationen finden Sie unter How to: Expose code to VBA in a Visual Basic project.

Gilt für: Die Informationen in diesem Thema gelten für Projekte auf Dokumentebene für Excel und Word. Weitere Informationen finden Sie unter features available by Office-App lication and project type.

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

Um VBA-Code zum Aufrufen von Code in einem Visual C#-Projekt zu aktivieren, ändern Sie den Code so, dass er für COM sichtbar ist, und legen Sie dann die ReferenceAssemblyFromVbaProject-Eigenschaft im Designer auf "True " fest.

Eine exemplarische Vorgehensweise, die das Aufrufen einer Methode in einem Visual C#-Projekt aus VBA veranschaulicht, finden Sie unter Walkthrough: Call code from VBA in a Visual C# project.

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

  1. Öffnen oder erstellen Sie ein Projekt auf Dokumentebene, das auf einem Word-Dokument, einer Excel-Arbeitsmappe oder einer Excel-Vorlage basiert, die Makros unterstützt und bereits VBA-Code enthält.

    Weitere Informationen zu den Dokumentdateiformaten, die Makros unterstützen, finden Sie unter Kombinieren von VBA- und Dokumentebenenanpassungen.

    Hinweis

    Diese Funktion kann in Word-Vorlagenprojekten nicht verwendet werden.

  2. Stellen Sie sicher, dass VBA-Code im Dokument ausgeführt werden darf, ohne den Benutzer aufzufordern, Makros zu aktivieren. Sie können die Vertrauenswürdigkeit für die Ausführung des VBA-Codes angeben, indem Sie den Speicherort des Office-Projekts der Liste der vertrauenswürdigen Speicherorte in den Trust Center-Einstellungen für Word oder Excel hinzufügen.

  3. Fügen Sie das Element hinzu, das Sie VBA einer öffentlichen Klasse in Ihrem Projekt zur Verfügung stellen möchten, und deklarieren Sie das neue Mitglied als öffentlich.

  4. Wenden Sie die folgenden ComVisibleAttribute Attribute und ClassInterfaceAttribute Attribute auf die Klasse an, die Sie vba verfügbar machen. Diese Attribute machen die Klasse für 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 in Ihrem Projekt, um eine Instanz der Klasse zurückzugeben, die Sie vba verfügbar machen:

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

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Wenn Sie eine Klasse verfügbar machen, die kein Hostelement für VBA ist, überschreiben Sie die GetAutomationObject-Methode eines beliebigen Hostelements in Ihrem Projekt, und geben Sie eine Instanz der Nicht-Hostelementklasse zurück. Der folgende Code geht beispielsweise davon aus, dass Sie eine Klasse namens DocumentUtilities 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 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 Extrahieren der Umgestaltung der Schnittstelle.

  7. Fügen Sie der Schnittstellendeklaration die öffentliche Schlüsselwort (keyword) hinzu.

  8. Machen Sie die Schnittstelle für COM sichtbar, indem Sie der Schnittstelle das folgende ComVisibleAttribute Attribut hinzufügen.

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

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

    Hinweis

    Wenn die Arbeitsmappe oder das Dokument nicht bereits VBA-Code enthält oder VBA-Code im Dokument nicht ausgeführt werden soll, wird eine Fehlermeldung angezeigt, wenn Sie die ReferenceAssemblyFromVbaProject-Eigenschaft auf "True" festlegen. Dies liegt daran, dass Visual Studio das VBA-Projekt im Dokument in dieser Situation nicht ändern kann.

  11. Klicken Sie in der Meldung, die angezeigt wird, auf OK . Diese Meldung erinnert Sie daran, dass beim nächsten Erstellen des Projekts beim nächsten Erstellen des Projekts der VBA-Code verloren geht, wenn Sie der Arbeitsmappe oder dem Dokument VBA-Code hinzufügen. Dies liegt daran, dass das Dokument im Buildausgabeordner jedes Mal überschrieben wird, wenn Sie das Projekt erstellen.

    Zu diesem Zeitpunkt konfiguriert Visual Studio das Projekt so, dass das VBA-Projekt die Assembly aufrufen kann. Visual Studio fügt dem VBA-Projekt auch eine Methode hinzu, die benannt ist GetManagedClass . Sie können diese Methode von praktisch überall im VBA-Projekt aufrufen, um auf die Klasse zuzugreifen, die Sie für VBA verfügbar gemacht haben.

  12. Erstellen Sie das Projekt.