Я использую приведенный ниже код для замены модулей в целевой книге. Код просматривает подпапку Updates в текущем каталоге на наличие файлов .bas, а при ее поиске удаляет старую версию и затем импортирует код. Он работает большую часть времени, однако иногда один или несколько замененных модулей принимают имя xxxxx1, где xxxxx - имя файла .bas. Это просто добавление имени модуля с «1». Других модулей с таким именем нет. Я проверил файл .bas, и первая строка правильно определяет VB_Name - Атрибут VB_Name = "xxxxx". Удалить работает нормально. Это просто импорт, который иногда приводит к проблеме. Я добавил приложение. Подождите после удаления, думая, что это может помочь, но проблема сохраняется.
Обратите внимание, что подпрограмма использует другие функции для определения пути к каталогу и поиска файлов. Отладка доказала, что они работают нормально. Эта проблема возникает случайно во время импорта.
Любая помощь будет оценена!
Dim iFilesNum As Integer
Dim iCount As Integer
Dim recMyFiles() As FoundFileInfo
Dim blFilesFound As Boolean
Dim directoryPath As String
Dim wbTarget As Workbook
Dim vbMod As Object
Dim myFile As String
Dim txtLine As String
Set wbTarget = ActiveWorkbook
directoryPath = getDirectoryPath("Updates")
If Dir(directoryPath, vbDirectory) = "" Then
varX = MsgBox("Updates directory not found. To apply updates you must first " & _
"unload the updates from the file that was emailed to you.", vbOKOnly, "IPM by Merlin")
Exit Sub
End If
blFilesFound = FindFiles(directoryPath, recMyFiles, iFilesNum, "*.bas", False)
If blFilesFound Then
For iCount = 1 To iFilesNum
With recMyFiles(iCount)
.sName = Replace(.sName, ".bas", "")
Set vbMod = Application.VBE.ActiveVBProject.vbComponents 'First we need to remove the existing module
vbMod.Remove VBComponent:=vbMod.Item(.sName)
Application.Wait (Now + #12:00:01 AM#)
wbTarget.VBProject.vbComponents.Import directoryPath & "\" & .sName & ".bas" 'import the new module.
End If
Kill directoryPath & "\" & .sName & ".bas"
End With
Next
Else
varX = MsgBox("No updates files found in the Updates directory.", vbInformation, "IPM by Merlin")
End If