Procedura dettagliata: chiamata di codice in un componente aggiuntivo a livello di applicazione da VBA
Aggiornamento: novembre 2007
Si applica a |
---|
Le informazioni contenute in questo argomento riguardano solo i progetti Visual Studio Tools per Office e le versioni di Microsoft Office specificati. Tipo di progetto
Versione Microsoft Office
Per ulteriori informazioni, vedere la classe Funzionalità disponibili in base ai tipi di progetto e applicazione. |
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.
Sebbene in questa procedura dettagliata si utilizzi specificamente Excel, i concetti illustrati sono applicabili a qualsiasi progetto di componente aggiuntivo fornito da Visual Studio Tools per Office.
In questa procedura dettagliata vengono illustrate le attività seguenti:
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.
![]() |
---|
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 questa procedura dettagliata, è necessario disporre dei seguenti componenti:
Visual Studio Tools per Office (componente facoltativo di Visual Studio 2008 Professional e Visual Studio Team System).
Microsoft Office Excel 2007.
Nota:
È possibile eseguire questa procedura dettagliata anche utilizzando Microsoft Office Excel 2003, sebbene per alcune istruzioni si presupponga l'utilizzo della barra multifunzione di Excel 2007.
Visual Studio Tools per Office viene installato per impostazione predefinita con le versioni di Visual Studio elencate. Per controllare se è installato, vedere Installazione di Visual Studio Tools per Office.
Per una dimostrazione video, vedere Video How to: Calling Code in an Application-Level Add-in from VBA.
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 Microsoft Office System 2007. Per ulteriori informazioni, vedere Procedura: creare progetti Visual Studio Tools per Office.
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 importa i dati in un nuovo foglio di lavoro della cartella di lavoro attiva e crea un semplice oggetto DataSet per contenere i dati.
Per esporre la classe AddInUtilities alle altre soluzioni Office, è necessario rendere la classe pubblica e visibile a COM. Inoltre è necessario fornire un modo per esporre l'interfaccia IDispatch nella classe. Il codice nella procedura descritta di seguito dimostra 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
Scegliere Aggiungi classe dal menu Progetto.
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.
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;
Sostituire la dichiarazione di classe AddInUtilities vuota con il codice riportato di seguito.
Questo codice rende visibile la classe AddInUtilities a COM e aggiunge il metodo ImportData alla classe. Per esporre l'interfaccia IDispatch, nella classe AddInUtilities viene implementata anche un'interfaccia dotata dell'attributo InterfaceIsIDispatch.
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _ <System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _ Public Interface IAddInUtilities Sub ImportData() End Interface <System.Runtime.InteropServices.ComVisibleAttribute(True)> _ <System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)> _ Public Class AddInUtilities Implements IAddInUtilities Public Sub ImportData() Implements IAddInUtilities.ImportData ' Create a new DataTable. Dim ds As New DataSet() Dim dt As DataTable = ds.Tables.Add("Customers") dt.Columns.Add(New DataColumn("LastName")) dt.Columns.Add(New DataColumn("FirstName")) ' Add a new row to the DataTable. Dim dr As DataRow = dt.NewRow() dr("LastName") = "Chan" dr("FirstName") = "Gareth" dt.Rows.Add(dr) ' Add a new XML map to the collection. Dim activeWorkbook As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook Dim xmlMap1 As Excel.XmlMap = activeWorkbook.XmlMaps.Add(ds.GetXmlSchema(), _ "NewDataSet") ' Import the data. If Not (xmlMap1 Is Nothing) Then Dim lastSheet As Object = activeWorkbook.Sheets(activeWorkbook.Sheets.Count) Dim newSheet As Excel.Worksheet = CType(activeWorkbook.Sheets.Add( _ After:=lastSheet), Excel.Worksheet) newSheet.Name = "Imported Data" activeWorkbook.XmlImportXml(ds.GetXml(), xmlMap1, True, _ newSheet.Range("A1")) End If End Sub End Class
[System.Runtime.InteropServices.ComVisibleAttribute(true)] [System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IAddInUtilities { void ImportData(); } [System.Runtime.InteropServices.ComVisibleAttribute(true)] [System.Runtime.InteropServices.ClassInterface(ClassInterfaceType.None)] public class AddInUtilities : IAddInUtilities { public void ImportData() { // Create a new DataTable. DataSet ds = new DataSet(); DataTable dt = ds.Tables.Add("Customers"); dt.Columns.Add(new DataColumn("LastName")); dt.Columns.Add(new DataColumn("FirstName")); // Add a new row to the DataTable. DataRow dr = dt.NewRow(); dr["LastName"] = "Chan"; dr["FirstName"] = "Gareth"; dt.Rows.Add(dr); // Add a new XML map to the collection. Excel.Workbook activeWorkbook = Globals.ThisAddIn.Application.ActiveWorkbook; Excel.XmlMap xmlMap1 = activeWorkbook.XmlMaps.Add(ds.GetXmlSchema(), "NewDataSet"); // Import the data. if (xmlMap1 != null) { object lastSheet = activeWorkbook.Sheets[activeWorkbook.Sheets.Count]; Excel.Worksheet newSheet = (Excel.Worksheet)activeWorkbook.Sheets.Add( System.Type.Missing, lastSheet, 1, System.Type.Missing); newSheet.Name = "Imported Data"; activeWorkbook.XmlImportXml(ds.GetXml(), out xmlMap1, true, newSheet.get_Range("A1", System.Type.Missing)); } } }
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
In Esplora soluzioni espandere Excel.
Fare clic con il pulsante destro del mouse su ThisAddIn.cs o su ThisAddIn.vb e scegliere Visualizza codice.
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; }
Scegliere Compila soluzione dal menu Compila.
Verificare che la soluzione venga compilata senza errori.
Test 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 testare il componente aggiuntivo
Premere F5 per eseguire il progetto.
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.
Sulla barra multifunzione, fare clic sulla scheda Sviluppatore.
Nota:
Se la scheda Sviluppatore non è visibile, è necessario prima visualizzarla. Per ulteriori informazioni, vedere Procedura: visualizzare la scheda Sviluppo nella barra multifunzione.
Nel gruppo Codice, fare clic su Visual Basic.
Viene aperto Visual Basic Editor.
Nella finestra Progetto, fare doppio clic su ThisWorkbook.
Viene aperto il file di codice per l'oggetto ThisWorkbook.
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 automationbject As Object Set addIn = Application.COMAddIns("ExcelImportData") Set automationObject = addIn.Object automationObject.ImportData End Sub
Premere F5.
Verificare che un nuovo foglio di dati importati sia stato aggiunto alla cartella di lavoro. Verificare inoltre che la cella A1 contenga la stringa Chan e che la cella B1 contenga la stringa Gareth.
Uscire da Excel.
Passaggi successivi
Per ulteriori informazioni sulla programmazione dei componenti aggiuntivi, vedere gli argomenti seguenti:
Utilizzo della classe ThisAddIn per automatizzare l'applicazione host ed eseguire altre attività nei progetti per componenti aggiuntivi. Per ulteriori informazioni, vedere Programmazione di componenti aggiuntivi a livello di applicazione e Elementi host di componenti aggiuntivi.
Creazione di un riquadro attività personalizzato in un componente aggiuntivo per Microsoft Office System 2007. Per ulteriori informazioni, vedere Cenni preliminari sui riquadri attività personalizzati e Procedura: aggiungere un riquadro attività personalizzato a un'applicazione.
Personalizzazione della barra multifunzione in un componente aggiuntivo per Microsoft Office System 2007. Per ulteriori informazioni, vedere°Cenni preliminari sulla barra multifunzione e Procedura: iniziare a personalizzare la barra multifunzione.
Vedere anche
Attività
Procedura: creare progetti Visual Studio Tools per Office
Concetti
Programmazione di componenti aggiuntivi a livello di applicazione
Chiamata di codice nei componenti aggiuntivi a livello di applicazione da altre soluzioni Office
Elementi host di componenti aggiuntivi
Architettura dei componenti aggiuntivi a livello di applicazione