nzp*_*mad 8 version-control excel vba excel-vba
是否有一种从电子表格中提取VBA并将其存储在存储库中的简洁方法.
电子表格几乎没有改变,但VBA确实如此.将整个电子表格存储在存储库中使得难以跨不同的VBA修订进行差异,以查看哪些代码已更改以及更改了哪些代码.
我们使用VBA 6.5/Excel 2003.
Mit*_*eat 10
以前版本的Excel和Access(2003年之前)通过加载项支持VBA源代码版本控制.我在Office 2000中非常有效地使用了它.
随着Office 2003的发布, Visual SourceSafe(VSS)对VBA的支持被删除,但Office XP Developer附带的加载项显然适用于Office 2003.
Microsoft知识库文章:
如果没有,您可以使用此代码来提取VBA代码(从这里开始,但它缺少最终的对象清理).阅读网页了解警告:
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
Set fs = Nothing
Set xl = Nothing
End If
End Sub
Run Code Online (Sandbox Code Playgroud)