У меня возникли некоторые странные причуды в Excel, в то время как программно удаляются модули, а затем реимпортируются из файлов. В принципе, у меня есть модуль с именем VersionControl, который должен экспортировать мои файлы в предопределенную папку и повторно импортировать их по требованию. Это код для повторного импорта (проблемы с ней описана ниже):Сброс изменений, внесенных в VBProject.VBComponents в Excel с использованием VBA
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
.
+1 Clever мало способ сделать некоторые домашние управления версиями. Я должен сам сделать что-то подобное. –
Это было вдохновлено [этим вопросом] (http://stackoverflow.com/questions/131605/best-way-to-do-version-control-for-ms-excel) здесь, на StackOverflow - моя версия - это всего лишь скромная переделать. – CamilB
Я не создал ничего подобного, но все, что я пробовал, будет: вызов из другой книги/addin; сначала создавая резервную копию рабочей книги, делая все удаленные сразу, сохраняя, импортируя все сразу. Вы также можете повеселиться с COM-версией Code Cleaner Роба Бови. Вы можете установить ссылку на него и получить доступ к импорту, экспорту и другим функциям. Мне будет интересно узнать, что вы узнали. –