2017-02-22 33 views
1

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

Теперь, когда он запускается, я получаю «ошибка времени выполнения 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 
+0

попробовать 'SPATH &«\»&«* .XL *»' ' – CallumDA

+0

использование Set wBk = Workbooks.Open (sPath & "\" & MyFile) ' – user3598756

+0

Вы уверены, что ваш' sPath' еще не содержит символ обратной косой черты? – JiheL

ответ

2

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

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

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