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.
Questa procedura dettagliata illustra come chiamare un metodo in una personalizzazione a livello di documento per Microsoft Office Excel dal codice visual Basic, Applications Edition (VBA) nella cartella di lavoro. La procedura prevede tre passaggi di base: aggiungere un metodo alla Sheet1 classe dell'elemento host, esporre il metodo al codice VBA nella cartella di lavoro e quindi chiamare il metodo dal codice VBA nella cartella di lavoro.
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 l'applicazione e il tipo di progetto di Office.
Anche se questa procedura dettagliata usa Excel in modo specifico, i concetti illustrati dalla procedura dettagliata sono applicabili anche ai progetti a livello di documento per Word.
In questa procedura dettagliata sono illustrati i task seguenti:
Creazione di una cartella di lavoro contenente codice VBA.
Affidarsi alla posizione della cartella di lavoro usando la funzione Centro di protezione in Excel.
Aggiungere un metodo alla classe dell'elemento host
Sheet1.Estrazione di un'interfaccia per la classe dell'elemento
Sheet1host.Esposizione del metodo al codice VBA.
Chiamata del metodo dal codice VBA.
Annotazioni
I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzare l'IDE di Visual Studio.
Prerequisiti
Per completare questa procedura dettagliata sono necessari i componenti seguenti:
Edizione di Visual Studio che include gli strumenti di sviluppo di Microsoft Office. Per altre informazioni, vedere Configurare un computer per sviluppare soluzioni Office.
Microsoft Excel
Creare una cartella di lavoro contenente codice VBA
Il primo passaggio consiste nel creare una cartella di lavoro abilitata per la macro contenente una semplice macro VBA. Prima di poter esporre il codice in una personalizzazione a VBA, la cartella di lavoro deve contenere già codice VBA. In caso contrario, Visual Studio non può modificare il progetto VBA per consentire al codice VBA di chiamare nell'assembly di personalizzazione.
Se si dispone già di una cartella di lavoro contenente codice VBA da usare, è possibile ignorare questo passaggio.
Per creare una cartella di lavoro contenente codice VBA
Avvia Excel.
Salvare il documento attivo come cartella di lavoro di Excel Macro-Enabled (*.xlsm) con il nome WorkbookWithVBA. Salvarlo in una posizione comoda, ad esempio il desktop.
Sulla barra multifunzione fare clic sulla scheda Sviluppo .
Annotazioni
Se la scheda Sviluppatore non è visibile, è prima necessario visualizzarla. Per altre informazioni, vedere Procedura: Visualizzare la scheda sviluppatore sulla barra multifunzione.
Nel gruppo Codice fare clic su Visual Basic.
Verrà aperto Visual Basic Editor.
Nella finestra Progetto fare doppio clic su ThisWorkbook.
Verrà aperto il file di codice per l'oggetto
ThisWorkbook.Aggiungere il codice VBA seguente al file di codice. Questo codice definisce una funzione semplice che non esegue alcuna operazione. L'unico scopo di questa funzione è garantire che nella cartella di lavoro esista un progetto VBA. Questa operazione è necessaria per i passaggi successivi di questa procedura dettagliata.
Sub EmptySub() End SubSalvare il documento e uscire da Excel.
Creare il progetto
È ora possibile creare un progetto a livello di documento per Excel che usa la cartella di lavoro abilitata per la macro creata in precedenza.
Per creare un nuovo progetto
Avvia Visual Studio.
Scegliere Nuovo dal menu File e quindi fare clic su Progetto.
Nel riquadro dei modelli, espandere Visual C#, e quindi Office/SharePoint.
Selezionare il nodo Componenti aggiuntivi di Office .
Nell'elenco dei modelli di progetto selezionare il progetto Cartella di lavoro di Excel 2010 o Cartella di lavoro di Excel 2013 .
Nella casella Nome digitare CallingCodeFromVBA.
Fare clic su OK.
Si apre la Creazione guidata per progetti di Visual Studio Tools for Office.
Selezionare Copia un documento esistente e nella casella Percorso completo del documento esistente specificare il percorso della cartella di lavoro WorkbookWithVBA creata in precedenza. Se si utilizza una propria cartella di lavoro abilitata per le macro, specificare il percorso di quella cartella di lavoro.
Fare clic su Fine.
Visual Studio apre la cartella di lavoro WorkbookWithVBA nella finestra di progettazione e aggiunge il progetto CallingCodeFromVBA a Esplora soluzioni.
Considerare attendibile l'ubicazione della cartella di lavoro
Prima di poter esporre il codice della soluzione al codice VBA nella cartella di lavoro, è necessario autorizzare l'esecuzione di VBA nella cartella di lavoro. Esistono diversi modi per eseguire questa operazione. In questa procedura dettagliata si eseguirà questa attività affidandoti alla posizione della cartella di lavoro nel Centro di protezione in Excel.
Per considerare attendibile il percorso della cartella di lavoro
Avvia Excel.
Fare clic sulla scheda File .
Fare clic sul pulsante Opzioni di Excel .
Nel riquadro delle categorie fare clic su Centro protezione.
Nel riquadro dei dettagli fare clic su Impostazioni centro protezione.
Nel riquadro delle categorie fare clic su Percorsi attendibili.
Nel riquadro dei dettagli fare clic su Aggiungi nuova posizione.
Nella finestra di dialogo Percorso attendibile di Microsoft Office passare alla cartella contenente il progetto CallingCodeFromVBA .
Selezionare Le sottocartelle di questo percorso sono anch'esse attendibili.
Nella finestra di dialogo Percorso attendibile di Microsoft Office fare clic su OK.
Nella finestra di dialogo Centro protezione fare clic su OK.
Nella finestra di dialogo Opzioni di Excel fare clic su OK.
Uscire da Excel.
Aggiungere un metodo alla classe Sheet1
Ora che il progetto VBA è configurato, aggiungere un metodo pubblico alla classe dell'elemento Sheet1 host che è possibile chiamare dal codice VBA.
Per aggiungere un metodo alla classe Sheet1
In Esplora soluzioni fare clic con il pulsante destro del mouse su Sheet1.cs e quindi scegliere Visualizza codice.
Il file Sheet1.cs viene aperto nell'editor di codice.
Aggiungere il codice seguente alla
Sheet1classe . IlCreateVstoNamedRangemetodo crea un nuovo NamedRange oggetto in corrispondenza dell'intervallo specificato. Questo metodo crea anche un gestore eventi per l'evento Selected dell'oggetto NamedRange. Più avanti in questa procedura dettagliata si chiamerà il metodoCreateVstoNamedRangenel codice VBA all'interno del documento.private Microsoft.Office.Tools.Excel.NamedRange namedRange1; public void CreateVstoNamedRange(Excel.Range range, string name) { if (!this.Controls.Contains(name)) { namedRange1 = this.Controls.AddNamedRange(range, name); namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler( namedRange1_Selected); } else { MessageBox.Show("A named range with this specific name " + "already exists on the worksheet."); } } private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target) { MessageBox.Show("This named range was created by Visual Studio " + "Tools for Office."); }Aggiungere il seguente metodo alla classe
Sheet1. Questo metodo esegue l'override del GetAutomationObject metodo per restituire l'istanza corrente dellaSheet1classe .protected override object GetAutomationObject() { return this; }Applicare gli attributi seguenti prima della prima riga della dichiarazione di
Sheet1classe. Questi attributi rendono la classe visibile a COM, ma senza generare un'interfaccia di classe.[System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)]
Estrarre un'interfaccia per la classe Sheet1
Prima di poter esporre il CreateVstoNamedRange metodo al codice VBA, è necessario creare un'interfaccia pubblica che definisce questo metodo ed è necessario esporre questa interfaccia a COM.
Per estrarre un'interfaccia per la classe Sheet1
Nel file di codice Sheet1.cs fare clic in un punto qualsiasi della
Sheet1classe .Scegliere Estrai interfaccia dal menu Refactor.
Nella finestra di dialogo Estrai interfaccia, nella casella Seleziona membri pubblici per formare l'interfaccia, fare clic sulla voce per il metodo
CreateVstoNamedRange.Fare clic su OK.
Visual Studio genera una nuova interfaccia denominata
ISheet1e modifica la definizione dellaSheet1classe in modo che implementi l'interfacciaISheet1. Visual Studio apre anche il file ISheet1.cs nell'editor di codice.Nel file ISheet1.cs sostituire la dichiarazione di
ISheet1interfaccia con il codice seguente. Questo codice rende pubblica l'interfacciaISheet1e applica l'attributo per rendere visibile l'interfaccia ComVisibleAttribute a COM.[System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); }Costruisci il progetto.
Esporre il metodo al codice VBA
Per esporre il CreateVstoNamedRange metodo al codice VBA nella cartella di lavoro, impostare la proprietà ReferenceAssemblyFromVbaProject per l'elemento Sheet1 host su True.
Per esporre il metodo al codice VBA
In Esplora soluzioni fare doppio clic su Sheet1.cs.
Il file WorkbookWithVBA viene aperto nella finestra di progettazione, con Sheet1 visibile.
Nella finestra Proprietà selezionare la proprietà ReferenceAssemblyFromVbaProject e impostare il valore su True.
Fare clic su OK nel messaggio visualizzato.
Costruisci il progetto.
Chiamare il metodo dal codice VBA
È ora possibile chiamare il CreateVstoNamedRange metodo dal codice VBA nella cartella di lavoro.
Annotazioni
In questa procedura dettagliata si aggiungerà codice VBA alla cartella di lavoro durante il debug del progetto. Il codice VBA aggiunto a questo documento verrà sovrascritto alla successiva compilazione del progetto, perché Visual Studio sostituisce il documento nella cartella di output della compilazione con una copia del documento dalla cartella del progetto principale. Se si desidera salvare il codice VBA, è possibile copiarlo nel documento nella cartella del progetto. Per altre informazioni, vedere Combinare personalizzazioni a livello di documento e VBA.
Per chiamare il metodo dal codice VBA
Premere F5 per eseguire il progetto.
Nel gruppo Codice della scheda Sviluppo fare clic su Visual Basic.
Verrà aperto Visual Basic Editor.
Scegliere Modulo dal menu Inserisci.
Aggiungere il codice seguente al nuovo modulo.
Questo codice chiama il metodo
CreateTablenell'assembly di personalizzazione. La macro accede a questo metodo usando il metodo globaleGetManagedClassper accedere allaSheet1classe di elementi host esposta al codice VBA. IlGetManagedClassmetodo è stato generato automaticamente quando si imposta la proprietà ReferenceAssemblyFromVbaProject precedentemente in questa procedura dettagliata.Sub CallVSTOMethod() Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1 Set VSTOSheet1 = GetManagedClass(Sheet1) Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange") End SubPremere F5.
Nella cartella di lavoro aperta fare clic sulla cella A1 in Sheet1. Verificare che venga visualizzata la finestra di messaggio.
Uscire da Excel senza salvare le modifiche.
Passaggi successivi
Per altre informazioni sulla chiamata di codice nelle soluzioni Office da VBA, vedere gli argomenti seguenti:
Chiamare il codice all'interno di un elemento host in una personalizzazione di Visual Basic da VBA. Questo processo è diverso dal processo di Visual C#. Per altre informazioni, vedere Procedura dettagliata: Chiamare il codice da VBA in un progetto Visual Basic.
Chiamare il codice in un componente aggiuntivo VSTO da VBA. Per altre informazioni, vedere Procedura dettagliata: Chiamare il codice in un componente aggiuntivo VSTO da VBA.
Contenuti correlati
- Combinare personalizzazioni a livello di documento e VBA
- Programmare personalizzazioni a livello di documento
- Procedura: Esporre codice a VBA in un progetto Visual Basic
- Procedura: Esporre codice a VBA in un progetto Visual C#
- Procedura dettagliata: Chiamare il codice da VBA in un progetto Visual Basic