我在Excel中遇到一些奇怪的怪癖,同時以編程方式刪除模塊,然後從文件重新導入它們。基本上,我有一個名爲VersionControl的模塊,它應該將我的文件導出到預定義的文件夾,並按需重新導入它們。這是(與它下面描述的問題)重新導入代碼:使用VBA在Excel中刷新VBProject.VBComponents
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
以便它們適用於自己?如果在Application對象中有一個函數,我打算在每個函數後調用Save
函數,但如果導入過程中出現問題,這可能會導致損失。
想法?
編輯:更改標籤synchronization
到version-control
。
+1聰明一點的方式做一些自制的版本控制。我應該自己做這樣的事情。 – 2012-01-13 19:32:47
這是StackOverflow中的[這個問題](http://stackoverflow.com/questions/131605/best-way-to-do-version-control-for-ms-excel)的啓發 - 我的版本只是一個謙虛重拍。 – CamilB 2012-01-13 19:36:35
我還沒有創建過這樣的東西,但我會嘗試的是:從另一個工作簿/插件調用;先備份工作簿,立即完成所有的刪除,保存,一次導入全部。您也可以使用Rob Bovey的Code Cleaner的COM版本。您可以設置對其的引用並訪問導入,導出和其他功能。我會很樂意看到你發現的。 – 2012-01-13 20:51:08