2017-02-22 102 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

使用'設置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 
相關問題