2009-03-04 10 views

Respuesta

12

encontrará una herramienta para esto aquí:

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

Es un guión VBS que automatiza Excel. Puede modificarlo de acuerdo con sus necesidades, tenga en cuenta que no es perfecto (lea la página web para advertencias).

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

Este script de arriba está lejos de ser perfecto. Después de buscar en la web durante mucho tiempo, finalmente encontré algo que realmente funciona: http://stackoverflow.com/a/25984759/2780179 . Tiene código de importación, exportación, formato de código y más. Puede usarlo inmediatamente, sin necesidad de editar ninguno de los libros existentes. – CodeKid

2

Cuando estaba haciendo un montón de desarrollo Excel VBA llegué en el hábito de exportar al formato de texto para cada archivo (módulo, etc.) cada vez que hice un cambio (de el menú contextual). Mantuve esos archivos en control de fuente junto con el binario XLA. Esto funcionó bastante bien para mí y no requirió ninguna herramienta externa.

+1

Además, el proceso de exportación de los componentes VBA (código, formularios) se puede automatizar con algunos bacalao VBA: ver aquí en [Ron de Bruin] (https://www.rondebruin.nl/win/s9/win002.htm) y aquí [Chip Pearson] (http://www.cpearson.com/excel/vbe.aspx). Modifiqué el código de Bruin y usé una bandera en el nombre ("SHARE _...."), de modo que al recorrerlo solo exporta los archivos que quiero. – tjejojyj

0

SourceTools es bueno una vez que esté en funcionamiento, pero si usted está necesitando de exportación de un gran número de libros de Excel, la apertura de cada uno y exportación que podrían ser un poco tedioso.

VbaDiff (descargo de responsabilidad: mi producto) tiene una API que puede leer a través de múltiples archivos de Excel y extraer el código de VBA. Hay un ejemplo de here - podría ser fácilmente adaptado para exportar el código a un archivo, listo para ser registrado. Si eres bueno con SharpSvn, ¡probablemente podrías agregar el código al repositorio sobre la marcha!

Cuestiones relacionadas