2009-03-04 7 views

risposta

12

troverete uno strumento per questo qui:

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

Si tratta di uno script VBS che automatizza Excel. Puoi modificarlo in base alle tue esigenze, nota che non è perfetto (leggi la pagina web per i caveat).

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

Questo script è ben lungi dall'essere perfetto. Dopo aver cercato sul Web per molto tempo ho finalmente trovato qualcosa che funziona davvero: http://stackoverflow.com/a/25984759/2780179 . Ha codice di importazione, esportazione, formattazione del codice e altro. È possibile utilizzarlo immediatamente, non è necessario modificare alcuna cartella di lavoro esistente. – CodeKid

2

Quando stavo facendo un sacco di sviluppo di Excel VBA ho preso l'abitudine di esportazione verso il formato di testo per ogni file (modulo, ecc) ogni volta che ho fatto un cambiamento (da il menu di scelta rapida). Ho tenuto quei file nel controllo sorgente a fianco del file binario XLA. Questo ha funzionato abbastanza bene per me e non ha richiesto strumenti esterni.

+1

Inoltre, il processo di esportazione dei componenti VBA (codice, moduli) può essere automatizzato con alcuni codifica VBA: vedere qui su [Ron de Bruin] (https://www.rondebruin.nl/win/s9/win002.htm) e qui [Chip Pearson] (http://www.cpearson.com/excel/vbe.aspx). Ho modificato il codice di de Bruin e ho usato un flag nel nome ("SHARE _....") così, mentre scorre su di esso, esporta solo i file che voglio. – tjejojyj

0

SourceTools è buono una volta che sei attivo e funzionante, ma se stai bisogno di esportare da un gran numero di cartelle di lavoro Excel, aprendo ognuno e l'esportazione potrebbe essere un po 'noioso.

VbaDiff (disclaimer: il mio prodotto) ha un'API in grado di leggere più file Excel ed estrarre il codice VBA. C'è un esempio di here - potrebbe essere facilmente adattato per esportare il codice in un file, pronto per essere archiviato. Se stai bene con SharpSvn, potresti probabilmente aggiungere il codice al repository mentre vai!