Condividi tramite


Procedura dettagliata: chiamata di codice in un componente aggiuntivo a livello di applicazione da VBA

In questa procedura dettagliata viene illustrato come esporre un oggetto in un componente aggiuntivo a livello di applicazione alle altre soluzioni Microsoft Office, inclusi i componenti aggiuntivi VBA (Visual Basic, Applications Edition) e COM.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di applicazione per Microsoft Office 2010 e Microsoft Office System 2007. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

Sebbene in questa procedura dettagliata si utilizzi in modo specifico Excel, i concetti illustrati sono applicabili a qualsiasi modello di progetto di componente aggiuntivo fornito da Visual Studio.

In questa procedura dettagliata vengono illustrate le seguenti attività:

  • Definizione di una classe che può essere esposta alle altre soluzioni Office.

  • Esposizione della classe alle altre soluzioni Office.

  • Chiamata di un metodo della classe dal codice VBA.

Nota

Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.

Prerequisiti

Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:

-

Una versione di Visual Studio 2010 che include gli strumenti per sviluppatori di Microsoft Office. Per ulteriori informazioni, vedere [Configurazione di un computer per sviluppare soluzioni Office](bb398242\(v=vs.100\).md).
  • Excel 2007 o Excel 2010.

Collegamento a video Per una versione video di questo argomento, vedere Video How to: Calling Code in an Application-Level Add-in from VBA (la pagina potrebbe essere in inglese).

Creazione del progetto per un componente aggiuntivo

Il primo passaggio consiste nella creazione di un progetto per un componente aggiuntivo per Excel.

Per creare un nuovo progetto

  • Creare un progetto per un componente aggiuntivo per Excel con il nome ExcelImportData, utilizzando il modello di progetto per componente aggiuntivo di Excel. Per ulteriori informazioni, vedere Procedura: creare progetti di Office in Visual Studio.

    Tramite Visual Studio verrà aperto il file di codice ThisAddIn.cs o ThisAddIn.vb e il progetto ExcelImportData verrà aggiunto in Esplora soluzioni.

Definizione di una classe che può essere esposta alle altre soluzioni Office

Lo scopo di questa procedura dettagliata è chiamare il metodo ImportData di una classe denominata AddInUtilities nel componente aggiuntivo dal codice VBA. Questo metodo consente di scrivere una stringa nella cella A1 del foglio di lavoro attivo.

Per esporre la classe AddInUtilities alle altre soluzioni Office, è necessario rendere la classe pubblica e visibile a COM. È anche necessario esporre l'interfaccia IDispatch nella classe. Il codice nella procedura descritta di seguito illustra una modalità per soddisfare questi requisiti. Per ulteriori informazioni, vedere Chiamata di codice nei componenti aggiuntivi a livello di applicazione da altre soluzioni Office.

Per definire una classe che può essere esposta alle altre soluzioni Office

  1. Scegliere Aggiungi classe dal menu Progetto.

  2. Nella finestra di dialogo Aggiungi nuovo elemento modificare il nome della nuova classe in AddInUtilities e scegliere Aggiungi.

    Il file AddInUtilities.cs o AddInUtilities.vb viene aperto nell'editor di codice.

  3. Aggiungere le seguenti istruzioni all'inizio del file.

    Imports System.Data
    Imports System.Runtime.InteropServices
    Imports Excel = Microsoft.Office.Interop.Excel
    
    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. Sostituire la classe AddInUtilities con il codice seguente.

    <ComVisible(True)> _
    Public Interface IAddInUtilities
        Sub ImportData()
    End Interface
    
    <ComVisible(True)> _
    <ClassInterface(ClassInterfaceType.None)> _
    Public Class AddInUtilities
        Implements IAddInUtilities
    
        ' This method tries to write a string to cell A1 in the active worksheet.
        Public Sub ImportData() Implements IAddInUtilities.ImportData
    
            Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
    
            If activeWorksheet IsNot Nothing Then
                Dim range1 As Excel.Range = activeWorksheet.Range("A1")
                range1.Value2 = "This is my data"
            End If
        End Sub
    End Class
    
    [ComVisible(true)]
    public interface IAddInUtilities
    {
        void ImportData();
    }
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        // This method tries to write a string to cell A1 in the active worksheet.
        public void ImportData()
        {
            Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
    
            if (activeWorksheet != null)
            {
                Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
                range1.Value2 = "This is my data";
            }
        }
    }
    

    Questo codice rende visibile la classe AddInUtilities a COM e aggiunge il metodo ImportData alla classe. Per esporre l'interfaccia IDispatch, la classe AddInUtilities dispone anche dell'attributo ClassInterfaceAttribute e implementa un'interfaccia che è visibile in COM.

Esposizione della classe alle altre soluzioni Office

Per esporre la classe AddInUtilities alle altre soluzioni Office, eseguire l'override del metodo RequestComAddInAutomationService nella classe ThisAddIn. Nell'override, restituire un'istanza della classe AddInUtilities.

Per esporre la classe AddInUtilities alle altre soluzioni Office

  1. In Esplora soluzioni espandere Excel.

  2. Fare clic con il pulsante destro del mouse su ThisAddIn.cs o su ThisAddIn.vb e scegliere Visualizza codice.

  3. Aggiungere il codice seguente alla classe ThisAddIn.

    Private utilities As AddInUtilities
    
    Protected Overrides Function RequestComAddInAutomationService() As Object
        If utilities Is Nothing Then
            utilities = New AddInUtilities()
        End If
        Return utilities
    End Function
    
    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. Scegliere Compila soluzione dal menu Compila.

    Verificare che la soluzione venga compilata senza errori.

Verifica del componente aggiuntivo

È possibile chiamare la classe AddInUtilities da alcuni tipi diversi di soluzioni Office. In questa procedura dettagliata, si utilizzerà il codice VBA in una cartella di lavoro di Excel. Per ulteriori informazioni sugli altri tipi di soluzioni Office utilizzabili, vedere Chiamata di codice nei componenti aggiuntivi a livello di applicazione da altre soluzioni Office.

Per verificare il componente aggiuntivo

  1. Premere F5 per eseguire il progetto.

  2. In Excel, salvare la cartella di lavoro attiva come Cartella di lavoro con attivazione macro di Excel (* .xlsm). Salvarla in un percorso comodo, ad esempio il desktop.

  3. Sulla barra multifunzione, fare clic sulla scheda Sviluppo.

    Nota

    Se la scheda Sviluppo non è visibile, è necessario prima visualizzarla. Per ulteriori informazioni, vedere Procedura: visualizzare la scheda Sviluppo nella barra multifunzione.

  4. Nel gruppo Codice, fare clic su Visual Basic.

    Viene aperto Visual Basic Editor.

  5. Nella finestra Progetto, fare doppio clic su ThisWorkbook.

    Viene aperto il file di codice per l'oggetto ThisWorkbook.

  6. Aggiungere al file di codice il seguente codice VBA. Il codice ottiene innanzitutto un oggetto COMAddIn che rappresenta il componente aggiuntivo ExcelImportData. Quindi utilizza la proprietà Object dell'oggetto COMAddIn per chiamare il metodo ImportData.

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. Premere F5.

  8. Verificare che un nuovo foglio di dati importati sia stato aggiunto alla cartella di lavoro. Verificare inoltre che la cella A1 contenga la stringa This is my data.

  9. Uscire da Excel.

Passaggi successivi

Per ulteriori informazioni sulla programmazione dei componenti aggiuntivi, vedere gli argomenti seguenti:

Vedere anche

Attività

Procedura: creare progetti di Office in Visual Studio

Concetti

Chiamata di codice nei componenti aggiuntivi a livello di applicazione da altre soluzioni Office

Personalizzazione delle funzionalità dell'interfaccia utente utilizzando le interfacce di estensibilità

Architettura dei componenti aggiuntivi a livello di applicazione

Altre risorse

Programmazione di componenti aggiuntivi a livello di applicazione

Sviluppo di soluzioni Office