Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel 2016 VBA星号通配符导致1004应用程序定义或对象定义错误_Vba_Excel_Excel 2016 - Fatal编程技术网

excel 2016 VBA星号通配符导致1004应用程序定义或对象定义错误

excel 2016 VBA星号通配符导致1004应用程序定义或对象定义错误,vba,excel,excel-2016,Vba,Excel,Excel 2016,我正试图弄清楚excel中突然发生了什么变化,使我的代码因为星号通配符而停止工作。我将此代码作为前端,将数据文件(包括.xls和xlsx)合并到包含以下代码的空白文件中。这是工作良好,使用多次没有问题。文件本身和代码几周前在Excel 2016上完成 现在当它运行时,我收到了“运行时错误1004应用程序定义或对象定义错误”,我不知道为什么。我修改了每一行的文本,我很确定是“.xl”导致了错误 我用一个目标文件夹中的实际文件名替换了“.xl”,它没有问题。为什么使用星号会突然导致此错误 以前有人碰

我正试图弄清楚excel中突然发生了什么变化,使我的代码因为星号通配符而停止工作。我将此代码作为前端,将数据文件(包括.xlsxlsx)合并到包含以下代码的空白文件中。这是工作良好,使用多次没有问题。文件本身和代码几周前在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

我认为反斜杠的模糊性导致了这里的问题

我建议删除它(如果存在),然后在代码需要的地方手动添加它:

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

尝试使用
sPath&“\”&“*.xl*”
使用
Set wBk=Workbooks.Open(sPath&“\”&MyFile)
是否确保您的
sPath
尚未包含反斜杠字符?请使用调试器逐步执行。抛出错误时,
MyFile
的值是多少?您所在的工作簿(即xlsm文件)是否与其他工作簿位于同一目录中?如果是,则当您的代码尝试打开已打开的文件时,它将崩溃;如果代码成功,则当它到达下一个文件并尝试在(现在已关闭)
此工作簿
工作表(1)
之后复制工作表时,它肯定会死机。