我刚刚设置了一个使用Bazaar的电子表格,并通过TortiseBZR手动签出。考虑到主题帮助了我保存部分,我想在这里发布我的解决方案。
我的解决方案是创建一个电子表格,导出保存中的所有模块,并在打开时删除并重新导入模块。是的,这可能对转换现有的电子表格有潜在的危险。
这允许我通过Emacs (是的,emacs)或本机在Excel中编辑模块中的宏,并在重大更改后提交BZR存储库。因为所有模块都是文本文件,所以BZR中的标准diff样式命令除了Excel文件本身外,都适用于我的源代码。
我为我的BZR存储库设置了一个目录,X:\Data\MySheet。在repo中有MySheet.xls和我的每个模块的一个.vba文件(即: Module1Macros)。在我的电子表格中,我添加了一个免于导出/导入周期的模块,称为"VersionControl“。每个要导出和重新导入的模块都必须以“宏”结尾。
“”模块的VersionControl内容:
代码语言:javascript复制Sub SaveCodeModules()
'This code Exports all VBA modules
Dim i%, sName$
With ThisWorkbook.VBProject
For i% = 1 To .VBComponents.Count
If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
sName$ = .VBComponents(i%).CodeModule.Name
.VBComponents(i%).Export "X:\Tools\MyExcelMacros\" & sName$ & ".vba"
End If
Next i
End With
End Sub
Sub ImportCodeModules()
With ThisWorkbook.VBProject
For i% = 1 To .VBComponents.Count
ModuleName = .VBComponents(i%).CodeModule.Name
If ModuleName <> "VersionControl" Then
If Right(ModuleName, 6) = "Macros" Then
.VBComponents.Remove .VBComponents(ModuleName)
.VBComponents.Import "X:\Data\MySheet\" & ModuleName & ".vba"
End If
End If
Next i
End With
End Sub接下来,我们必须设置打开/保存的事件挂钩,以运行这些宏。在代码查看器中,右键单击"ThisWorkbook“并选择”查看代码“。您可能需要将代码窗口顶部的复选框从“(一般)”视图向下移到“工作簿”视图。
“工作簿”视图的内容:
代码语言:javascript复制Private Sub Workbook_Open()
ImportCodeModules
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
SaveCodeModules
End Sub我将在接下来的几周内适应这个工作流程,如果我有任何问题的话,我会发帖。
谢谢你分享VBComponent代码!