Я столкнулся с некоторыми странными причудами в 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, хотя это может привести к потерям, если что-то пойдет не так во время импорта.
Идеи?
Редактировать: тег синхронизация
изменен на контроль версий
.