Condividi tramite


Esporre il codice a VBA in un progetto Visual C#

È possibile esporre il codice in un progetto Visual C# al codice visual Basic, Applications Edition (VBA) se si vuole che i due tipi di codice interagiscono tra loro.

Il processo di Visual C# è diverso dal processo di Visual Basic. Per altre informazioni, vedere Procedura: Esporre il codice a VBA in un progetto Visual Basic.

Si applica a: le informazioni contenute in questo argomento si applicano ai progetti a livello di documento per Excel e Word. Per altre informazioni, vedere Funzionalità disponibili per app Office lication e tipo di progetto.

Esporre il codice in un progetto Visual C#

Per consentire al codice VBA di chiamare il codice in un progetto Visual C#, modificare il codice in modo che sia visibile a COM e quindi impostare la proprietà ReferenceAssemblyFromVbaProject su True nella finestra di progettazione.

Per una procedura dettagliata che illustra come chiamare un metodo in un progetto Visual C# da VBA, vedere Procedura dettagliata: Chiamare il codice da VBA in un progetto Visual C#.

Per esporre il codice in un progetto Visual C# a VBA

  1. Aprire o creare un progetto a livello di documento basato su un documento di Word, una cartella di lavoro di Excel o un modello di Excel che supporta macro e che contiene già codice VBA.

    Per altre informazioni sui formati di file di documento che supportano le macro, vedere Combinare le personalizzazioni a livello di documento e VBA.

    Nota

    Questa funzionalità non può essere usata nei progetti Modello di Word,

  2. Assicurarsi che il codice VBA nel documento sia autorizzato a essere eseguito senza chiedere all'utente di abilitare le macro. È possibile considerare attendibile l'esecuzione del codice VBA aggiungendo il percorso del progetto di Office all'elenco di percorsi attendibili nelle impostazioni del Centro protezione per Word o Excel.

  3. Aggiungere il membro da esporre a VBA a una classe pubblica nel progetto e dichiarare il nuovo membro come pubblico.

  4. Applicare gli attributi e ClassInterfaceAttribute seguenti ComVisibleAttribute alla classe esposta a VBA. Questi attributi rendono visibile la classe a COM, ma senza generare un'interfaccia di classe.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. Eseguire l'override del metodo GetAutomationObject di una classe di elementi host nel progetto per restituire un'istanza della classe esposta a VBA:

    • Se si espone una classe di elementi host a VBA, eseguire l'override del metodo GetAutomationObject che appartiene a questa classe e restituire l'istanza corrente della classe .

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Se si espone una classe che non è un elemento host a VBA, eseguire l'override del metodo GetAutomationObject di qualsiasi elemento host nel progetto e restituire un'istanza della classe dell'elemento non host. Ad esempio, il codice seguente presuppone che si esponga una classe denominata DocumentUtilities a VBA.

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

      Per altre informazioni sugli elementi host, vedere Panoramica degli elementi host e dei controlli host.

  6. Estrarre un'interfaccia dalla classe esposta a VBA. Nella finestra di dialogo Estrai interfaccia selezionare i membri pubblici da includere nella dichiarazione di interfaccia. Per altre informazioni, vedere Estrarre il refactoring dell'interfaccia.

  7. Aggiungere la parola chiave public alla dichiarazione di interfaccia.

  8. Rendere visibile l'interfaccia a COM aggiungendo l'attributo seguente ComVisibleAttribute all'interfaccia .

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Aprire il documento (per Word) o il foglio di lavoro (per Excel) nella finestra di progettazione in Visual Studio.

  10. Nella finestra Proprietà selezionare la proprietà ReferenceAssemblyFromVbaProject e modificarne il valore impostandola su True.

    Nota

    Se la cartella di lavoro o il documento non contiene già codice VBA o se il codice VBA nel documento non è attendibile per l'esecuzione, verrà visualizzato un messaggio di errore quando si imposta la proprietà ReferenceAssemblyFromVbaProject su True. Ciò avviene perché in questa situazione, in Visual Studio non è possibile modificare il progetto VBA nel documento.

  11. Fare clic su OK nel messaggio visualizzato. Questo messaggio ricorda che se si aggiunge codice VBA alla cartella di lavoro o al documento durante l'esecuzione del progetto da Visual Studio, il codice VBA andrà perso alla successiva compilazione del progetto. Ciò è dovuto al fatto che il documento nella cartella di output della compilazione viene sovrascritto ogni volta che si compila il progetto.

    A questo punto, Visual Studio configura il progetto in modo che il progetto VBA possa chiamare nell'assembly. Visual Studio aggiunge anche un metodo denominato GetManagedClass al progetto VBA. È possibile chiamare questo metodo da qualsiasi punto del progetto VBA per accedere alla classe esposta a VBA.

  12. Compilare il progetto.