Сброс изменений, внесенных в VBProject.VBComponents в Excel с помощью VBA

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

Идеи?

Редактировать: тег синхронизация изменен на контроль версий .

11
задан CamilB 14 January 2012 в 07:28
поделиться