gpt4 book ai didi

excel - 对 MS Excel 进行版本控制的最佳方法

转载 作者:行者123 更新时间:2023-12-01 16:14:33 38 4
gpt4 key购买 nike

您在 MS Excel (2003/2007) 中使用了哪些版本控制系统?您会推荐什么以及为什么?您发现您最受好评的版本控制系统有哪些局限性?

为了正确看待这一点,这里有几个用例:

  1. VBA 模块的版本控制
  2. 多个人正在处理 Excel 电子表格,他们可能正在对同一工作表进行更改,并希望将其合并和集成。该工作表可能包含公式、数据、图表等
  3. 用户不太懂技术,使用的版本控制系统越少越好
  4. 空间限制是一个考虑因素。理想情况下,仅保存增量更改,而不是保存整个 Excel 电子表格。

最佳答案

我刚刚设置了一个使用 Bazaar 的电子表格,通过 TortiseBZR 手动 checkin / checkout 。鉴于该主题帮助我完成了保存部分,我想在这里发布我的解决方案。

我的解决方案是创建一个电子表格,在保存时导出所有模块,并在打开时删除并重新导入模块。是的,这对于转换现有电子表格可能存在潜在危险。

这使我能够通过 Emacs(是的,emacs)或在 Excel 中编辑模块中的宏,并在重大更改后提交我的 BZR 存储库。由于所有模块都是文本文件,因此 BZR 中的标准 diff 样式命令适用于除 Excel 文件本身之外的我的源。

我已经为 BZR 存储库设置了一个目录,X:\Data\MySheet。存储库中包含 MySheet.xls 和每个模块的一个 .vba 文件(即:Module1Macros)。在我的电子表格中,我添加了一个不受导出/导入周期限制的模块,称为“VersionControl”。每个要导出和重新导入的模块都必须以“Macros”结尾。

“版本控制”模块的内容:

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

接下来,我们必须为打开/保存设置事件 Hook 来运行这些宏。在代码查看器中,右键单击“ThisWorkbook”并选择“查看代码”。您可能需要下拉代码窗口顶部的选择框才能从“(常规)” View 更改为“工作簿” View 。

“工作簿” View 的内容:

Private Sub Workbook_Open()

ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveCodeModules

End Sub

我将在接下来的几周内适应此工作流程,如果有任何问题我会发布。

感谢分享 VBComponent 代码!

关于excel - 对 MS Excel 进行版本控制的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/131605/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com