2009-01-21 10 views
3

Je comprends qu'il est possible de le faire en utilisant macro Excel, voir: Programmatically extract macro (VBA) code from Word 2007 docs, mais ce que je veux faire ici est d'utiliser VB6 pour faire une application qui fait la même chose.Extrait/Affichage Macro (VBA) à partir de fichiers .xls en utilisant VB6 (sans ouvrir Excel)

J'ai un problème sur la façon de pointer vers le classeur Excel (thisworkbook.VBproject est utilisé dans l'exemple ci-dessus).

Est-il possible de sélectionner un fichier .xls à partir du disque dur, par exemple c:\try.xls, et extraire/afficher ses macros? S'il vous plaît donnez votre avis!

+0

Les macros Excel sont segmentées, ce qui rend difficile l'extraction de la macro sans utiliser Excel. –

Répondre

2

Définissez une référence à la bibliothèque d'objets Microsoft Excel 12.0 (ou toute autre version requise) et utilisez la collection VBProject.VBComponents du classeur, par ex.

Sub ExportCode() 
    Dim app As Excel.Application 
    Set app = New Excel.Application 

    Dim wb As Excel.Workbook 
    Set wb = Excel.Application.Workbooks.Open("C:\Book2.xls") 

    Dim strExt As String 

    Dim VBComp As Object 
    For Each VBComp In wb.VBProject.VBComponents 
    Select Case VBComp.Type 
     Case 2 ' Class module 
     strExt = ".cls" 
     Case 3 ' Form 
     strExt = ".frm" 
     Case 1 ' Standard module 
     strExt = ".bas" 
     Case 100 ' Document? 
     strExt = ".cls" 
     Case Else 
     Stop ' What else is there? 
     strExt = ".cls" 
    End Select 

    VBComp.Export "C:\" & VBComp.Name & strExt 
    Next 
    wb.Close False 
    app.Quit 

End Sub 
1

La ligne suivante:

Set wb = Excel.Application.Workbooks.Open("C:\Book2.xls")

devrait être

Set wb = app.Workbooks.Open("C:\Book2.xls")

+2

"Devrait être"? C'est un refactoring digne mais l'amélioration est négligeable. – onedaywhen

1

VbaDiff peut lire des macros Excel directement à partir du fichier Excel, exactement de la façon que vous décrivez. Si vous avez besoin d'un accès par programmation, il existe une version Enterprise avec une API. Vous pouvez faire des choses assez amusantes avec ceci, comme dans these examples.

Informations complètes - J'ai fabriqué ce produit. J'ai continué à rencontrer des problèmes similaires à ceux de Dean et j'ai décidé que le moment était venu de le résoudre une fois pour toutes!

+0

Beau programme, mais ... 30 lignes pour le procès? Bah, je déteste les essais dysfonctionnels ... –

+0

Je les déteste aussi André, mais le modèle démo fonctionnant parfaitement ne fonctionne pas très bien pour ce genre de fonctionnalité de récupération. Toutes les autres fonctions sont là. Merci d'avoir regardé VbaDiff. –

+1

J'ai supprimé la limite de 30 lignes pour la fonctionnalité diff principale. –

Questions connexes