有没有人知道从许多Excel文档导出VBA代码的方法,以便可以将代码添加到subversion存储库中?无需手动打开每个文档并导出代码。
答案 0 :(得分:13)
你会在这里找到一个工具:
http://www.pretentiousname.com/excel_extractvba/index.html
这是一个自动化excel的VBS脚本。您可以根据自己的需要进行修改 - 请注意它并不完美(请参阅网页了解警告)。
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
- 亚当
答案 1 :(得分:6)
我在过去几年成功使用它来导出我的代码并保存它。我可以确认它在Office 2003,2007中有效。我认为它也适用于2000年。
答案 2 :(得分:2)
当我进行大量的Excel VBA开发时,我养成了每次进行更改时(从上下文菜单)导出到每个文件(模块等)的文本格式的习惯。我将这些文件与XLA二进制文件一起保存在源代码控制中。这对我来说效果很好,并且不需要任何外部工具。
答案 3 :(得分:0)
SourceTools一旦启动并运行就很好,但如果您需要从大量Excel工作簿中导出,打开每个工作簿并导出它可能会有点单调乏味。
VbaDiff(免责声明:我的产品)有一个API,可以读取多个Excel文件并提取VBA代码。有一个here的例子 - 它可以很容易地被调整为将代码导出到一个文件,准备签入。如果你对SharpSvn很好,你可以随时将代码添加到存储库!