Procédure pas à pas : appel de code dans un complément d'application à partir de VBA
Mise à jour : novembre 2007
S'applique à |
---|
Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés. Type de projet
Version de Microsoft Office
Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet. |
Cette procédure pas à pas explique comment exposer un objet d'un complément d'application à d'autres solutions Microsoft Office, y compris des compléments VBA (Visual Basic for Applications) et COM.
Bien que cette procédure utilise spécifiquement Excel, les concepts présentés ici s'appliquent à tous les projets de complément fournis par Visual Studio Tools pour Office.
Cette procédure pas à pas illustre les tâches suivantes :
Définition d'une classe susceptible d'être exposée à d'autres solutions Office.
Exposition de la classe à d'autres solutions Office.
Appel d'une méthode de la classe à partir du code VBA.
Remarque : |
---|
Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio. |
Composants requis
Les composants suivants sont nécessaires pour exécuter cette procédure pas à pas :
Visual Studio Tools pour Office (composant facultatif de Visual Studio 2008 Professional et Visual Studio Team System)
Microsoft Office Excel 2007
Remarque : Vous pouvez également effectuer cette procédure à l'aide de Microsoft Office Excel 2003. Certaines instructions partent toutefois du principe que vous utilisez le ruban d'Excel 2007.
Visual Studio Tools pour Office est installé par défaut avec les versions répertoriées de Visual Studio. Pour vérifier s'il est installé, consultez Installation de Visual Studio Tools pour Office.
Pour une présentation vidéo, consultez la page Comment : appeler du code dans un complément d'application à partir de VBA.
Création du projet de complément
La première étape consiste à créer un projet de complément pour Excel.
Pour créer un projet
Créez un projet de complément Excel portant le nom ImporterDonnéesExcel à l'aide du modèle de projet de complément Excel intégré à la version 2007 de Microsoft Office System. Pour plus d'informations, consultez Comment : créer des projets Visual Studio Tools pour Office.
Visual Studio ouvre le fichier de code ThisAddIn.cs ou ThisAddIn.vb et ajoute le projet ImporterDonnéesExcel à l'Explorateur de solutions.
Définition d'une classe susceptible d'être exposée à d'autres solutions Office
Cette procédure pas à pas a pour but d'appeler la méthode ImportData d'une classe nommée AddInUtilities dans votre complément à partir du code VBA. Cette méthode importe des données dans une nouvelle feuille de calcul du classeur actif et crée un DataSet simple destiné à contenir les données.
Pour exposer la classe AddInUtilities à d'autres solutions Office, vous devez faire rendre la classe publique et visible par COM. Vous devez également faire en sorte d'exposer l'interface IDispatch dans la classe. Le code de la procédure suivante vous explique comment respecter ces exigences. Pour plus d'informations, consultez Appel de code dans des compléments d'application à partir d'autres solutions Office.
Pour définir une classe susceptible d'être exposée à d'autres solutions Office
Dans le menu Projet, cliquez sur Ajouter une classe.
Dans la boîte de dialogue Ajouter un nouvel élément, remplacez le nom de la nouvelle classe par AddInUtilities, puis cliquez sur Ajouter.
Le fichier AddInUtilities.cs ou AddInUtilities.vb s'ouvre dans l'éditeur de code.
Ajoutez les instructions suivantes au début du fichier.
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;
Remplacez la déclaration de la classe AddInUtilities vide par le code suivant.
Ce code rend la classe AddInUtilities visible par COM et ajoute la méthode ImportData à la classe. Pour exposer l'interface IDispatch, la classe AddInUtilities implémente également une interface dotée de l'attribut 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)); } } }
Exposition de la classe à d'autres solutions Office
Pour exposer la classe AddInUtilities à d'autres solutions Office, substituez la méthode RequestComAddInAutomationService de la classe ThisAddIn. Dans le cas de cette substitution, retournez une instance de la classe AddInUtilities.
Pour exposer la classe AddInUtilities à d'autres solutions Office
Dans l'Explorateur de solutions, développez Excel.
Cliquez avec le bouton droit sur ThisAddIn.cs ou ThisAddIn.vb, puis cliquez sur Afficher le code.
Ajoutez le code suivant à la 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; }
Dans le menu Générer, cliquez sur Générer la solution.
Vérifiez que la solution est générée sans erreur.
Test du complément
Vous pouvez appeler la classe AddInUtilities à partir de plusieurs types de solutions Office. Cette procédure pas à pas utilise le code VBA dans un classeur Excel. Pour plus d'informations sur les autres types de solutions Office utilisables, consultez Appel de code dans des compléments d'application à partir d'autres solutions Office.
Pour tester votre complément
Appuyez sur F5 pour exécuter votre projet.
Dans Excel, enregistrez le classeur actif en tant que Classeur Excel prenant en charge les macros (*.xlsm) dans un emplacement commode, tel que le Bureau.
Dans le ruban, cliquez sur l'onglet Développeur.
Remarque : Si l'onglet Développeur n'est pas visible, vous devez préalablement l'afficher. Pour plus d'informations, consultez Comment : afficher l'onglet Développeur sur le ruban.
Dans le groupe Code, cliquez sur Visual Basic.
Visual Basic Editor s'ouvre.
Dans la fenêtre Projet, double-cliquez sur ThisWorkbook.
Le fichier de code de l'objet ThisWorkbook s'ouvre.
Ajoutez le code VBA suivant au fichier de code. Dans un premier temps, ce code reçoit un objet COMAddIn représentant le complément ImporterDonnéesExcel. Il utilise ensuite la propriété Object de l'objet COMAddIn pour appeler la méthode ImportData.
Sub CallVSTOMethod() Dim addIn As COMAddIn Dim automationbject As Object Set addIn = Application.COMAddIns("ExcelImportData") Set automationObject = addIn.Object automationObject.ImportData End Sub
Appuyez sur F5.
Vérifiez qu'une nouvelle feuille Données importées a été ajoutée au classeur. Assurez-vous également que la cellule A1 contient le chaîne Chan et la cellule B1 la chaîne Gareth.
Quittez Excel.
Étapes suivantes
Pour en savoir plus sur la programmation de compléments, consultez les rubriques ci-dessous :
Utiliser la classe ThisAddIn pour automatiser l'application hôte et effectuer d'autres tâches dans les projets de complément. Pour plus d'informations, consultez Programmation de compléments d'application et Élément hôte AddIn.
Créer un volet de tâches personnalisé dans un complément pour la version 2007 de Microsoft Office System. Pour plus d'informations, consultez Vue d'ensemble des volets de tâches personnalisés et Comment : ajouter un volet de tâches personnalisé à une application.
Personnaliser le ruban dans un complément pour la version 2007 de Microsoft Office System. Pour plus d'informations, consultez Vue d'ensemble du ruban et Comment : démarrer avec la personnalisation du ruban.
Voir aussi
Tâches
Comment : créer des projets Visual Studio Tools pour Office
Concepts
Programmation de compléments d'application
Appel de code dans des compléments d'application à partir d'autres solutions Office