从多个Excel文档导出VBA代码以放入版本控制
有人知道如何从大量Excel文档中导出VBA代码,以便将代码添加到subversion存储库中吗?无需手动打开每个文档并导出代码。您可以在此处找到用于此操作的工具: 这是一个自动化excel的VBS脚本。你可以根据自己的需要修改它——注意它并不完美(请阅读网页了解注意事项)从多个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
选项显式
常量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