Я испытываю некоторые странные причуды в Excel, в то время как программно удаляет модули, а затем реимпортирует их из файлов. В принципе, у меня есть модуль с именем VersionControl, который должен экспортировать мои файлы в предопределенную папку и reimport их по требованию. Это код для реимпортации (проблема с ним описана ниже):
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
.