excel 2016 VBA подстановочный знак звездочки, вызывающий ошибку 1004, определенную приложением или ошибкой, определяемой объектом

Я пытаюсь выяснить, что вдруг изменилось в excel, чтобы мой код перестал работать именно из-за подстановочного знака звездочки. У меня был этот код в качестве внешнего интерфейса для объединения файлов данных (как .xls, так и .xlsx) в пустой файл, содержащий код, показанный ниже. Это работало нормально и использовалось много раз без проблем. Сам файл и код были сделаны на Excel 2016 несколько недель назад.

Теперь, когда он запускается, я получаю "ошибка времени выполнения 1004, определенная приложением или ошибкой объекта", и я понятия не имею, почему. Я возился с текстом в каждой строке и почти уверен, что причиной ошибки является ".xl".

Я заменил «.xl» на фактическое имя файла из папки назначения, и это сработало без проблем. Почему использование звездочки может внезапно вызвать эту ошибку?

Кто-нибудь сталкивался с этим раньше? Я искал сверху и снизу и не мог найти никого, кто сообщил бы что-то точно такое же. Вот то, что я использовал, и снова, это работало нормально в течение пары недель.

Sub MergeDataFiles()

Dim sPath As String
Dim MyFile As String
Dim wBk As Workbook
sPath = InputBox("Paste File Path Here")
MyFile = Dir(sPath & "\*.xl*")

Application.EnableEvents = False
Application.ScreenUpdating = False

Do While Len(MyFile) > 0
Set wBk = Workbooks.Open(sPath & MyFile)
wBk.Sheets(1).Copy After:=ThisWorkbook.Sheets(1)
wBk.Close True
MyFile = Dir()
Loop

ActiveWorkbook.Save
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

person Bocephus480    schedule 22.02.2017    source источник
comment
попробуй sPath & "\" & "*.xl*"   -  person CallumDA    schedule 22.02.2017
comment
используйте 1_   -  person user3598756    schedule 22.02.2017
comment
Вы убедились, что ваш sPath еще не содержит символ обратной косой черты?   -  person JiheL    schedule 22.02.2017
comment
Пройдитесь по нему отладчиком. Каково значение MyFile при возникновении ошибки?   -  person Comintern    schedule 22.02.2017
comment
Находится ли рабочая книга, в которой вы находитесь (например, файл xlsm), в том же каталоге, что и другие? Если это так, ваш код рухнет, когда попытается открыть уже открытый файл, или, если он переживет это, определенно умрет, когда доберется до следующего файла и попытается скопировать лист после (теперь закрытого) ThisWorkbook Sheets(1).   -  person YowE3K    schedule 22.02.2017
comment
@CallumDA Перемещение обратной косой черты сделало это. Странно, что раньше работало, а потом перестало.   -  person Bocephus480    schedule 23.02.2017


Ответы (1)


Я думаю, что двусмысленность обратной косой черты вызывает здесь проблему.

Я бы предложил удалить его, если он есть, а затем добавить его вручную, где этого требует код:

Sub MergeDataFiles()

Dim sPath As String
Dim MyFile As String
Dim wBk As Workbook
sPath = InputBox("Paste File Path Here")

If Right(sPath, 1) = "\" Then sPath = Left(sPath, Len(sPath) - 1) ' strip away last backslash if present

MyFile = Dir(sPath & "\*.xl*")

Application.EnableEvents = False
Application.ScreenUpdating = False

Do While Len(MyFile) > 0
Set wBk = Workbooks.Open(sPath & "\" & MyFile) ' include backslash to keep full path correct
wBk.Sheets(1).Copy After:=ThisWorkbook.Sheets(1)
wBk.Close True
MyFile = Dir()
Loop

ActiveWorkbook.Save
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
person CLR    schedule 22.02.2017