У меня есть подпрограмма 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
On Error Resume Next
и посмотрите, какие другие ошибки вы получаете. делайте это только тогда, когда вы ожидаете ошибку в строке кода, а затем вернитесь кOn Error Goto 0
после этой строки. Тогда дайте нам знать, что происходит. - person IAmNerd2000   schedule 24.01.2019