Comment récupérer les noms des macros à partir d’un classeur Excel à l’aide de Visual Basic 6.0
Résumé
Cet article pas à pas explique comment utiliser Visual Basic 6.0 pour récupérer les noms des macros à partir d’un classeur Excel.
Conditions requises
Les éléments suivants décrivent le matériel, les logiciels, l’infrastructure réseau, les compétences et les connaissances recommandés et les service packs dont vous avez besoin :
- Excel 2000, Excel 2002, Office Excel 2003 ou Office Excel 2007
- Macros Excel
- Visual Basic pour Applications
Créer un classeur Excel avec deux macros
Démarrez Excel. Un classeur vide est créé.
Appuyez sur Alt+F11 pour démarrer Visual Basic Editor.
Dans l’Explorateur de projets, double-cliquez sur ThisWorkbook pour démarrer l’éditeur de code.
Collez le code suivant pour deux macros simples dans l’éditeur de code :
Option Explicit Sub Macro_A() MsgBox "This is Macro A" End Sub Sub Macro_B() MsgBox "This is Macro B" End Sub
Fermez Visual Basic Editor et revenez à l’affichage feuille de calcul.
Dans Excel 2003 et dans les versions antérieures d’Excel, enregistrez le classeur en tant que C:\Abc.xls.
Dans Excel 2007, enregistrez le classeur sous la forme d’un classeur compatible macro nommé C:\Abc.xlsm.
Fermez le classeur et quittez Excel.
Créer une application Visual Basic pour répertorier les macros dans le classeur
Dans Visual Basic 6.0, créez un projet EXE standard.
Dans le menu Projet , cliquez sur Références. Dans la boîte de dialogue Références , sélectionnez les références suivantes :
- Extensibilité de Microsoft Visual Basic pour Applications 5.3
- Pour Microsoft Excel 2000 : Bibliothèque d’objets Microsoft Excel 9.0
- Pour Microsoft Excel 2002 : Bibliothèque d’objets Microsoft Excel 10.0
- Pour Microsoft Office Excel 2003 : Bibliothèque d’objets Microsoft Excel 11.0
- Pour Microsoft Office Excel 2007 : Bibliothèque d’objets Microsoft Excel 12.0
Cliquez sur OK.
Ajoutez un bouton au formulaire. Le bouton porte le nom par défaut Command1.
Ajoutez une zone de liste au formulaire. La zone de liste porte le nom par défaut List1.
Définissez une procédure de gestionnaire d’événements click pour le bouton. Utilisez le code suivant pour cette procédure, afin d’afficher des informations sur les macros définies dans C:\Abc.xls :
Private Sub Command1_Click() ' Declare variables to access the Excel workbook. Dim objXLApp As Excel.Application Dim objXLWorkbooks As Excel.Workbooks Dim objXLABC As Excel.Workbook ' Declare variables to access the macros in the workbook. Dim objProject As VBIDE.VBProject Dim objComponent As VBIDE.VBComponent Dim objCode As VBIDE.CodeModule ' Declare other miscellaneous variables. Dim iLine As Integer Dim sProcName As String Dim pk As vbext_ProcKind ' Open Excel, and open the workbook. Set objXLApp = New Excel.Application Set objXLWorkbooks = objXLApp.Workbooks Set objXLABC = objXLWorkbooks.Open("C:\ABC.XLS") ' Empty the list box. List1.Clear ' Get the project details in the workbook. Set objProject = objXLABC.VBProject ' Iterate through each component in the project. For Each objComponent In objProject.VBComponents ' Find the code module for the project. Set objCode = objComponent.CodeModule ' Scan through the code module, looking for procedures. iLine = 1 Do While iLine < objCode.CountOfLines sProcName = objCode.ProcOfLine(iLine, pk) If sProcName <> "" Then ' Found a procedure. Display its details, and then skip ' to the end of the procedure. List1.AddItem objComponent.Name & vbTab & sProcName iLine = iLine + objCode.ProcCountLines(sProcName, pk) Else ' This line has no procedure, so go to the next line. iLine = iLine + 1 End If Loop Set objCode = Nothing Set objComponent = Nothing Next Set objProject = Nothing ' Clean up and exit. objXLABC.Close objXLApp.Quit End Sub
Tester l’exemple
- Générez et exécutez l’application.
- Cliquez sur le bouton de commande. La zone de liste affiche les noms de toutes les macros et du classeur qui les contient, comme suit : ThisWorkbook Macro_A ThisWorkbook Macro_B
Résolution des problèmes
En raison des dispositions de sécurité améliorées dans Excel 2002, Excel 2003 et Excel 2007, vous pouvez recevoir le message d’erreur suivant du programme Visual Basic lorsque vous utilisez Excel 2002, Excel 2003 ou Excel 2007 : l’accès programmatique à Visual Basic Project n’est pas approuvé.
Pour plus d’informations sur ce problème et la façon de le résoudre, cliquez sur le numéro d’article suivant pour afficher l’article dans la Base de connaissances Microsoft :
282830 PRB : l’accès par programmation au projet Office XP VBA est refusé
References
Pour plus d’informations, consultez le site web Microsoft Developer Network (MSDN) suivant :
Développement Microsoft Office avec Visual Studio
Pour plus d’informations, consultez les articles suivants de la Base de connaissances :
219905 Comment ajouter et exécuter dynamiquement une macro VBA à partir de Visual Basic