VBA Excel. Импорт модуля .bas изменяет название модуля. - PullRequest
0 голосов
/ 17 мая 2018

Я использую приведенный ниже код для замены модулей в целевой книге. Код просматривает подпапку 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...