Экспорт кода VBA из нескольких документов Excel для управления версиями

Кто-нибудь знает способ экспортировать код VBA из нескольких документов Excel, чтобы код можно было добавить в репозиторий subversion? Без необходимости вручную открывать каждый документ и экспортировать код.

Ответ 1

Здесь вы найдете инструмент для этого:

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

Это VBS script, который автоматизирует excel. Вы можете изменить его в соответствии с вашими потребностями - обратите внимание, что он не идеален (читайте веб-страницу для оговорок).

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

Я использовал это успешно в течение последних нескольких лет, чтобы экспортировать мой код и сохранить его. Я могу подтвердить, что он работает в Office 2003, 2007. Предполагаю, что он работает и в 2000 году.

http://www.codeproject.com/KB/office/SourceTools.aspx

Ответ 3

Когда я занимался разработкой Excel VBA, я привык экспортировать в текстовый формат для каждого файла (модуль и т.д.) каждый раз, когда я вносил изменения (из контекстного меню). Я сохранил эти файлы в контроле источника вместе с бинарным элементом XLA. Это работало очень хорошо для меня и не требовало каких-либо внешних инструментов.

Ответ 4

SourceTools хорош после запуска и запуска, но если вам нужно экспортировать из большого количества книг Excel, открытие каждого из них и его экспорт может быть немного утомительным.

VbaDiff (отказ от ответственности: мой продукт) имеет API, который может читать несколько файлов Excel и извлекать код VBA. Здесь приведен пример здесь - он может быть легко адаптирован для экспорта кода в файл, готовый к проверке. Если вы хорошо разбираетесь в SharpSvn, вы, вероятно, можете добавить код в репозиторий, когда идете!