Procedura: esporre il codice a VBA in un progetto Visual Basic
È possibile esporre codice in un progetto Visual Basic al codice di Visual Basic, Applications Edition (VBA) se si desidera che i due tipi di codice interagiscano l'uno con l'altro.
Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento per Excel 2013, Excel 2010, Word 2013 e Word 2010. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.
Il processo di Visual Basic è diverso dal processo di Visual C#.Per ulteriori informazioni, vedere Procedura: esporre il codice a VBA in un progetto Visual C#.
Il processo è diverso per il codice in una classe dell'elemento host rispetto al codice nelle altre classi:
Esposizione di codice in una classe dell'elemento host
Esposizione di codice non incluso in una classe dell'elemento host
Per una dimostrazione video correlata, vedere l'articolo relativo alla chiamata di codice VSTO da VBA (la pagina potrebbe essere in inglese).
Esposizione di codice in una classe dell'elemento host
Per consentire al codice VBA di chiamare il codice di Visual Basic in una classe dell'elemento host, impostare la proprietà EnableVbaCallers dell'elemento host su True.
Per una procedura dettagliata che dimostra come esporre un metodo di una classe dell'elemento host e quindi chiamarlo da VBA, vedere Procedura dettagliata: chiamata di codice da VBA in un progetto Visual Basic.Per ulteriori informazioni sugli elementi host, vedere Cenni preliminari sugli elementi e sui controlli host.
Per esporre il codice in un elemento host a VBA
Aprire o creare un progetto Visual Basic 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 già contiene codice VBA.
Per ulteriori informazioni sui formati di file del documento che supportano macro, vedere Combinazione di VBA con le personalizzazioni a livello di documento.
[!NOTA]
Questa funzionalità non può essere utilizzata nei progetti Modello di Word,
Assicurarsi che il codice VBA del documento possa essere eseguito senza richiedere all'utente di attivare 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 la proprietà, il metodo o l'evento che si desidera esporre a VBA a una delle classi dell'elemento host nel progetto e dichiarare il nuovo membro come Public.Il nome della classe dipende dall'applicazione:
In un progetto Word, la classe dell'elemento host è denominata ThisDocument per impostazione predefinita.
In un progetto Excel, le classi dell'elemento host sono denominate ThisWorkbook, Sheet1, Sheet2 e Sheet3 per impostazione predefinita.
Impostare la proprietà EnableVbaCallers per l'elemento host su True.Questa proprietà è disponibile nella finestra Proprietà quando l'elemento host è aperto nella finestra di progettazione.
Dopo avere impostato questa proprietà, Visual Studio imposta automaticamente la proprietà ReferenceAssemblyFromVbaProject su True.
[!NOTA]
Se la cartella di lavoro o il documento non contiene già codice VBA, o se il codice VBA nel documento non è considerato attendibile per l'esecuzione, si riceverà un messaggio di errore quando si imposta la proprietà EnableVbaCallers su True.Ciò avviene perché Visual Studio non può modificare il progetto VBA nel documento in questa situazione.
Fare clic su OK nel messaggio visualizzato.Questo messaggio ricorda che se si aggiunge codice VBA alla cartella di lavoro o al documento mentre si sta eseguendo il progetto da Visual Studio, il codice VBA andrà perso la prossima volta che si compila il progetto.Ciò avviene perché il documento nella cartella dell'output di compilazione viene sovrascritta ogni volta che si compila il progetto.
A questo punto, in Visual Studio il progetto viene configurato in modo da consentire le chiamate nell'assembly dal progetto VBA.Visual Studio aggiunge inoltre una proprietà denominata CallVSTOAssembly al modulo ThisDocument, ThisWorkbook, Sheet1, Sheet2 o Sheet3 nel progetto VBA.È possibile utilizzare questa proprietà per accedere a membri pubblici della classe che si espone a VBA.
Compilare il progetto.
Esposizione di codice non incluso in una classe dell'elemento host
Per consentire al codice VBA di chiamare il codice di Visual Basic in una classe non inclusa in un elemento host, modificare il codice in modo che sia visibile a VBA.
Per esporre codice non incluso in una classe dell'elemento host a VBA
Aprire o creare un progetto Visual Basic 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 già contiene codice VBA.
Per ulteriori informazioni sui formati di file del documento che supportano macro, vedere Combinazione di VBA con le personalizzazioni a livello di documento.
[!NOTA]
Questa funzionalità non può essere utilizzata nei progetti Modello di Word,
Assicurarsi che il codice VBA del documento possa essere eseguito senza richiedere all'utente di attivare 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 che si desidera esporre a VBA a una classe pubblica nel progetto e dichiarare il nuovo membro come public.
Applicare gli attributi ComVisibleAttribute e ComClassAttribute seguenti alla classe che si sta esponendo a VBA.Questi attributi rendono visibile la classe a VBA.
<Microsoft.VisualBasic.ComClass()> _ <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Eseguire l'override del metodo GetAutomationObject di una classe dell'elemento host nel progetto per restituire un'istanza della classe che si sta esponendo a VBA.L'esempio di codice seguente presuppone che si stia esponendo a VBA una classe denominata DocumentUtilities.
Protected Overrides Function GetAutomationObject() As Object Return New DocumentUtilities() End Function
Aprire il documento (per Word) o la finestra di progettazione del foglio di lavoro (per Excel) 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 è considerato attendibile per l'esecuzione, si riceverà un messaggio di errore quando si imposta la proprietà ReferenceAssemblyFromVbaProject su True.Ciò avviene perché Visual Studio non può modificare il progetto VBA nel documento in questa situazione.
Fare clic su OK nel messaggio visualizzato.Questo messaggio ricorda che se si aggiunge codice VBA alla cartella di lavoro o al documento mentre si sta eseguendo il progetto da Visual Studio, il codice VBA andrà perso la prossima volta che si compila il progetto.Ciò avviene perché il documento nella cartella dell'output di compilazione viene sovrascritta ogni volta che si compila il progetto.
A questo punto, in Visual Studio il progetto viene configurato in modo da consentire le chiamate nell'assembly dal progetto VBA.In Visual Studio viene inoltre aggiunto al progetto VBA un metodo denominato GetManagedClass.È possibile chiamare questo metodo da qualsiasi punto del progetto VBA per accedere alla classe esposta a VBA.
Compilare il progetto.
Vedere anche
Attività
Procedura: creare progetti di Office in Visual Studio
Procedura dettagliata: chiamata di codice da VBA in un progetto Visual Basic
Procedura: esporre il codice a VBA in un progetto Visual C#
Altre risorse
Progettazione e creazione di soluzioni Office
Combinazione di VBA con le personalizzazioni a livello di documento