您在 MS Excel (2003/2007) 中使用了哪些版本控制系统?你会推荐什么,为什么?您发现您的顶级版本控制系统有哪些限制?
从这个角度来看,这里有几个用例:
我刚刚设置了一个使用 Bazaar 的电子表格,通过 TortiseBZR 手动签入/签出。鉴于该主题帮助我完成了保存部分,我想在这里发布我的解决方案。
我的解决方案是创建一个电子表格,在保存时导出所有模块,并在打开时删除并重新导入模块。 是的,这可能对转换现有电子表格有潜在危险。
这允许我通过 Emacs (是的,emacs)或在 Excel 中本地编辑模块中的宏,并在重大更改后提交我的 BZR 存储库。因为所有模块都是文本文件,所以 BZR 中的标准 diff 样式命令适用于我的源代码,但 Excel 文件本身除外。
我已经为我的 BZR 存储库设置了一个目录 X:\Data\MySheet。在 repo 中有我的每个模块的 MySheet.xls 和一个 .vba 文件(即:Module1Macros)。在我的电子表格中,我添加了一个免于导出/导入周期的模块,称为“VersionControl”。每个要导出和重新导入的模块都必须以“宏”结尾。
“版本控制”模块的内容:
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”并选择“查看代码”。您可能必须下拉代码窗口顶部的选择框才能从“(常规)”视图更改为“工作簿”视图。
“工作簿”视图的内容:
Private Sub Workbook_Open() ImportCodeModules End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) SaveCodeModules End Sub
我将在接下来的几周内适应这个工作流程,如果我有任何问题,我会发布。
感谢分享 VBComponent 代码!