Я обнаружил некоторые странные причуды в 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
.