这不是我第一次问这个问题,但我稍微改变了细节,希望能让它更清楚。这是我尝试过的代码的一个版本:
Private Sub OpenWbsInPath(zPath As String)
Dim zFile As String
zPath = IIf(Right$(zPath, 1) = "\", zPath, zPath & "\") ' Ensure zPath ends with "\".
zFile = Dir(zPath & "*.xls*") ' "xxxx\*.xls*". OK.
Do While zFile <> ""
Workbooks.Open Filename:=zPath & zFile ' Fails with error 1004 on 2nd iteration.
DoEvents ' Makes no difference.
zFile = Dir() ' Next filename. Path also OK.
Loop
End Sub
我也尝试过使用类似的过程CreateObject("Scripting.FileSystemObject")
。到目前为止,在我尝试过的所有方法中,包括我首先创建文件名数组,然后尝试单独打开每个文件的方法,第一个文件打开正常,然后下一个文件无法打开,并出现错误 1004。
真正奇怪的是,在旧版本的程序中,所有文件都可以正常打开。我什至尝试复制相同的代码,但它在新位置仍然不起作用。我已经没有主意了 - 在打开每个工作簿之前是否需要为它创建一个临时文件夹?看起来很疯狂。
我已经运行了您的代码,如果可以打开文件,可以确认它工作正常,如果不能打开,则会失败并显示错误 1004。
无法打开文件的可能原因包括
- 它是腐败的,或者。
- 它已经开放了。
如果出现以下情况,则无法打开文件:
- 您或您的代码已经打开了它(包含代码的文件也在该文件夹中吗?),
- 其他人已打开它(该文件夹是否共享?),
- Excel 的另一个实例已将其打开(检查任务管理器是否有其他实例)。
您可以手动打开代码失败的文件吗?在Open之前添加一个Debug.Print zFile来查看哪些文件失败
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)