Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从多个Excel文档导出VBA代码以放入版本控制_Vba_Excel_Version Control - Fatal编程技术网

从多个Excel文档导出VBA代码以放入版本控制

从多个Excel文档导出VBA代码以放入版本控制,vba,excel,version-control,Vba,Excel,Version Control,有人知道如何从大量Excel文档中导出VBA代码,以便将代码添加到subversion存储库中吗?无需手动打开每个文档并导出代码。您可以在此处找到用于此操作的工具: 这是一个自动化excel的VBS脚本。你可以根据自己的需要修改它——注意它并不完美(请阅读网页了解注意事项) 选项显式 常量vbext\u ct\u ClassModule=2 常量vbext\U ct\U文件=100 常数vbext\u ct\u MSForm=3 常量vbext\U ct\U标准模块=1 主要 副总管 Dim

有人知道如何从大量Excel文档中导出VBA代码,以便将代码添加到subversion存储库中吗?无需手动打开每个文档并导出代码。

您可以在此处找到用于此操作的工具:

这是一个自动化excel的VBS脚本。你可以根据自己的需要修改它——注意它并不完美(请阅读网页了解注意事项)

选项显式
常量vbext\u ct\u ClassModule=2
常量vbext\U ct\U文件=100
常数vbext\u ct\u MSForm=3
常量vbext\U ct\U标准模块=1
主要
副总管
Dim xl
暗fs
暗淡的笔记本
Dim VBComp
暗Sfx
Dim导出文件夹
如果Wscript.Arguments.Count为1,则
MsgBox“作为唯一的参数,提供XLS文件的完整路径以从中提取所有VBA。”
其他的
Set xl=CreateObject(“Excel.Application”)
设置fs=CreateObject(“Scripting.FileSystemObject”)
xl.Visible=true
设置WBook=xl.Workbooks.Open(Trim(wScript.Arguments(0)))
ExportFolder=WBook.Path&“\”&fs.GetBaseName(WBook.Name)
fs.CreateFolder(ExportFolder)
对于WBook.VBProject.VBComponents中的每个VBComp
选择案例VBComp.Type
案例vbext\U ct\U类模块,vbext\U ct\U文档
Sfx=“.cls”
案例vbext\U ct\MSForm
Sfx=“.frm”
案例vbext\U ct\U标准模块
Sfx=“.bas”
其他情况
Sfx=“”
结束选择
如果是Sfx“”,则
出错时继续下一步
呃,明白了
VBComp.Export导出文件夹&“\”&VBComp.Name&Sfx
如果错误号为0,则
MsgBox“无法导出”&ExportFolder&“\”&VBComp.Name&Sfx
如果结束
错误转到0
如果结束
下一个
xl.退出
如果结束
端接头

-Adam

当我在进行大量Excel VBA开发时,我养成了每次更改(从上下文菜单)时都将每个文件(模块等)导出为文本格式的习惯。我将这些文件与XLA二进制文件一起保存在源代码管理中。这对我来说非常有效,不需要任何外部工具。

在过去几年中,我成功地使用它导出代码并保存它。我可以确认它在Office 2003、2007中工作。我想它在2000年也能用


一旦您启动并运行SourceTools,它就很好了,但是如果您需要从大量Excel工作簿中导出,打开每个工作簿并导出它可能会有点乏味


VbaDiff(免责声明:我的产品)有一个API,可以读取多个Excel文件并提取VBA代码。这里有一个例子,它可以很容易地将代码导出到一个文件中,以备签入。如果您对SharpSvn很在行,您可能可以在运行时将代码添加到存储库中

上面的脚本远非完美。在网上搜索了很长一段时间后,我终于找到了一些真正有用的东西:。它有代码导入、导出、代码格式化等功能。您可以立即使用它,无需编辑任何现有工作簿。此外,使用一些VBA代码可以自动导出VBA组件(代码、表单)的过程:请参见此处的(&here)。我已经修改了de Bruin代码,并在名称中使用了一个标志(“SHARE_…)”,这样当它在其中循环时,只会导出我想要的文件。
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