Код Excel/VBA игнорирует введенные аргументы

У меня есть подпрограмма VBA, которая при необходимости должна загружать модули пользовательского кода. Моя проблема в том, что когда я передаю ("ModuleA", ".bas"), код вернет "ModuleB". ModuleB не существует (был удален) в указанном пути к файлу.

Как этот код может вернуть несуществующий файл, если ему специально передано другое значение? Переменная 'filepath' содержит правильный путь, и он правильно передается оператору импорта.

Кроме того, оператор «Удалить» не удаляет переданный ему модуль.

Я никогда не сталкивался с такой проблемой и теряюсь в том, что делать.

Что я пробовал: перезапуск excel/ПК, переименование модулей для изменения пути, добавление кода для удаления модулей в конце sub.

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''SJH
'LoadModule
'
'Loads in a module with a specified name from the BigData Directory
'
'extension includes the ., so .frm or .bas
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub LoadModule(ByVal ModuleName As String, ByVal extension As String)
    ThisWorkbook.Activate
    Err.Clear
     'handle errors in-line...
    On Error Resume Next

    'include reference to "Microsoft Visual Basic for Applications Extensibility"
    Dim vbproj As VBIDE.VBProject
    Dim vbc As VBIDE.VBComponent
    Dim filepath As String

    filepath = ("\\uslafnas01\GE_LAB\BigData\" & ModuleName & extension)
    Set vbproj = ActiveWorkbook.VBProject

    'Error will occur if component with this name is not in the project
    Set vbc = vbproj.VBComponents(ModuleName)

    If Err.Number <> 0 Then
        Err.Clear
        'so add it...
        vbproj.VBComponents.Import filepath
        If Err.Number <> 0 Then
           MsgBox ("Could not import " & ModuleName & " Module: " & filepath)
        End If
    Else
        'no error - vbc should be valid object
        'remove existing version first before adding new version
        vbproj.VBComponents.Remove vbc
        vbproj.VBComponents.Import filepath
        If Err.Number <> 0 Then
            MsgBox ("New " & ModuleName & " couldn't replace old " & ModuleName & " Module " & filepath)
        End If
    End If


    'Set vbc = Nothing
    'Set vbproj = Nothing


End Sub

person 610163    schedule 24.01.2019    source источник
comment
Попробуйте удалить оператор On Error Resume Next и посмотрите, какие другие ошибки вы получаете. делайте это только тогда, когда вы ожидаете ошибку в строке кода, а затем вернитесь к On Error Goto 0 после этой строки. Тогда дайте нам знать, что происходит.   -  person IAmNerd2000    schedule 24.01.2019


Ответы (1)


Имя модуля определяется не его именем файла, а скрытым атрибутом VB_Name, который вы можете увидеть, если откроете модуль, скажем, в Блокноте.

Если вы откроете ModuleA.bas в Блокноте, я подозреваю, что вы увидите это как самую первую строку над Option Explicit:

Attribute VB_Name = "ModuleB"

Имя файла не имеет значения, именно этот атрибут определяет программное имя модуля VBA.

Атрибуты модулей и элементов нельзя просматривать или редактировать (напрямую) в VBE.

person Mathieu Guindon    schedule 24.01.2019
comment
Спасибо, вы поняли! - person 610163; 24.01.2019