【发布时间】:2012-02-09 23:26:27
【问题描述】:
在以编程方式删除模块然后从文件中重新导入它们时,我在 Excel 中遇到了一些奇怪的问题。基本上,我有一个名为 VersionControl 的模块,它应该将我的文件导出到预定义的文件夹,并根据需要重新导入它们。这是重新导入的代码(问题如下所述):
Dim i As Integer
Dim ModuleName As String
Application.EnableEvents = False
With ThisWorkbook.VBProject
For i = 1 To .VBComponents.Count
If .VBComponents(i).CodeModule.CountOfLines > 0 Then
ModuleName = .VBComponents(i).CodeModule.Name
If ModuleName <> "VersionControl" Then
If PathExists(VersionControlPath & "\" & ModuleName & ".bas") Then
Call .VBComponents.Remove(.VBComponents(ModuleName))
Call .VBComponents.Import(VersionControlPath & "\" & ModuleName & ".bas")
Else
MsgBox VersionControlPath & "\" & ModuleName & ".bas" & " cannot be found. No operation will be attempted for that module."
End If
End If
End If
Next i
End With
运行此程序后,我注意到有些模块不再出现,而有些模块有重复(例如 mymodule 和 mymodule1)。在单步执行代码时,很明显有些模块在Remove 调用之后仍然存在,并且它们仍然在项目中时被重新导入。有时,这只会导致模块以1 为后缀,但有时我同时拥有原件和副本。
有没有办法刷新对Remove 和Import 的调用,以便它们自己应用?我正在考虑在每个之后调用一个Save 函数,如果 Application 对象中有一个函数,但如果在导入过程中出现问题,这可能会导致损失。
想法?
编辑:将标签 synchronization 更改为 version-control。
【问题讨论】:
-
+1 做一些自制版本控制的聪明小方法。我应该自己做这样的事情。
-
它的灵感来自 StackOverflow 上的 this question - 我的版本只是一个适度的翻拍。
-
我还没有创建这样的东西,但我会尝试的事情是:从另一个工作簿/插件调用;首先备份工作簿,一次完成所有删除,一次保存,一次导入。您也可以使用 Rob Bovey 的 Code Cleaner 的 COM 版本。您可以设置对它的引用并访问导入、导出和其他功能。我很想看看你发现了什么。
-
@DougGlancy:我尝试先进行所有删除,然后重新导入,但不知何故,我保存模块名称的数组在函数之间消失了,即使它是全局的。但这是另一个问题。我有一些自己的想法,我会尝试的。 +1 建议“从另一个工作簿调用”。
标签: excel vba memory version-control flush