2009-03-04 7 views

Répondre

12

Vous trouverez un outil pour cela ici:

http://www.pretentiousname.com/excel_extractvba/index.html

Il est un script VBS qui automatise Excel. Vous pouvez le modifier en fonction de vos besoins - notez qu'il n'est pas parfait (lisez la page web pour les mises en garde).

option explicit 

Const vbext_ct_ClassModule = 2 
Const vbext_ct_Document = 100 
Const vbext_ct_MSForm = 3 
Const vbext_ct_StdModule = 1 

Main 

Sub Main 
    Dim xl 
    Dim fs 
    Dim WBook 
    Dim VBComp 
    Dim Sfx 
    Dim ExportFolder 

    If Wscript.Arguments.Count <> 1 Then 
     MsgBox "As the only argument, give the FULL path to an XLS file to extract all the VBA from it." 
    Else 

     Set xl = CreateObject("Excel.Application") 
     Set fs = CreateObject("Scripting.FileSystemObject") 

     xl.Visible = true 

     Set WBook = xl.Workbooks.Open(Trim(wScript.Arguments(0))) 

     ExportFolder = WBook.Path & "\" & fs.GetBaseName(WBook.Name) 

     fs.CreateFolder(ExportFolder) 

     For Each VBComp In WBook.VBProject.VBComponents 
      Select Case VBComp.Type 
       Case vbext_ct_ClassModule, vbext_ct_Document 
        Sfx = ".cls" 
       Case vbext_ct_MSForm 
        Sfx = ".frm" 
       Case vbext_ct_StdModule 
        Sfx = ".bas" 
       Case Else 
        Sfx = "" 
      End Select 
      If Sfx <> "" Then 
       On Error Resume Next 
       Err.Clear 
       VBComp.Export ExportFolder & "\" & VBComp.Name & Sfx 
       If Err.Number <> 0 Then 
        MsgBox "Failed to export " & ExportFolder & "\" & VBComp.Name & Sfx 
       End If 
       On Error Goto 0 
      End If 
     Next 

     xl.Quit 
    End If 
End Sub 

-Adam

+2

Ce script ci-dessus est loin d'être parfait. Après avoir fait des recherches sur le web depuis longtemps, j'ai finalement trouvé quelque chose qui fonctionne réellement: http://stackoverflow.com/a/25984759/2780179 . Il a l'importation de code, l'exportation, le formatage de code et plus encore. Vous pouvez l'utiliser immédiatement, pas besoin de modifier les classeurs existants. – CodeKid

2

Quand je faisais beaucoup de développement Excel VBA je suis entré dans l'habitude d'exporter au format texte pour chaque fichier (module, etc.) chaque fois que je fait un changement (de le menu contextuel). J'ai gardé ces fichiers dans le contrôle de la source à côté du binaire XLA. Cela a très bien fonctionné pour moi et ne nécessitait aucun outil externe.

+1

En outre, le processus d'exportation des composants VBA (code, formulaires) peut être automatisé avec quelques morues VBA: voir ici [Ron de Bruin] (https://www.rondebruin.nl/win/s9/win002.htm) & ici [Chip Pearson] (http://www.cpearson.com/excel/vbe.aspx). J'ai modifié le code de Bruin et j'ai utilisé un drapeau dans le nom ("SHARE _....") pour qu'il ne traverse que les fichiers que je veux. – tjejojyj

0

SourceTools est bonne une fois que vous êtes opérationnel, mais si tu as besoin d'exporter à partir d'un grand nombre de classeurs Excel, ouvrir chacun et exporter pourrait être un peu fastidieux. VbaDiff (avertissement: mon produit) a une API qui peut lire plusieurs fichiers Excel et extraire le code VBA. Il y a un exemple de here - il pourrait facilement être adapté pour exporter le code dans un fichier, prêt à être archivé. Si vous êtes bon avec SharpSvn, vous pourriez probablement ajouter le code dans le dépôt au fur et à mesure!

Questions connexes