Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È 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
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,
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.
Aggiungere il membro da esporre a VBA a una classe pubblica nel progetto e dichiarare il nuovo membro come pubblico.
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)]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
DocumentUtilitiesa VBA.protected override object GetAutomationObject() { return new DocumentUtilities(); }Per altre informazioni sugli elementi host, vedere Panoramica degli elementi host e dei controlli host.
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.
Aggiungere la parola chiave public alla dichiarazione di interfaccia.
Rendere visibile l'interfaccia a COM aggiungendo l'attributo seguente ComVisibleAttribute all'interfaccia .
[System.Runtime.InteropServices.ComVisible(true)]Aprire il documento (per Word) o il foglio di lavoro (per Excel) nella finestra di progettazione in Visual Studio.
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.
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
GetManagedClassal progetto VBA. È possibile chiamare questo metodo da qualsiasi punto del progetto VBA per accedere alla classe esposta a VBA.Compilare il progetto.