如果Windows仍在使用该文件,请稍候



我有一个用于拆分XPS文件的宏代码,如果您等待Windows或SAP完成文件写入,它可以正常工作
我需要一些方法来查看文件是否可以打开,或者Windows/SAP是否仍在使用它。

您可以从SAP进行打印,并作为XPS文档进行打印
切换到我的Excel文档以将文件拆分为多个部分,在拆分过程中,我需要将文件重命名为zip文件并解压缩,这就是错误发生的地方。

a = 1
On Error GoTo tryagain:
tryagain:
a = a + 1
If a = 10 Then Exit Sub
DoEvents
' rename from example 1.oxps -> 1.zip
Name pth & Fname As pth & Left(Fname, InStr(Fname, ".") - 1) & ".zip"
On Error GoTo 0 

理论上,上面的代码片段应该循环10次(或者9次,或者其他什么……目前不重要(,并尝试重命名文件,如果每次都失败,则退出sub。
事实上,当a = 3时,我在Name行遇到错误,错误为75
这意味着它已经循环过一次Name行并失败,返回到tryagain:,然后失败但出错。

coed在第一次失败时运行On Error GoTo 0吗?这是我能看到这种行为的唯一原因。

我对此有什么选择?我如何确保我的代码等待,直到文件可以重命名并且继续?

我找到了一个解决方案。

我创建了一个等待的错误处理程序,然后继续返回代码。

'the main code only has goto err if there is an error and a goto point called tryagain.
On Error GoTo err 
tryagain:
Name pth & Fname As pth & Left(Fname, InStr(Fname, ".") - 1) & ".zip"

' error handler:
err:
Application.Wait (Now + TimeValue("0:00:01")) ' add a one second wait
DoEvents
Resume tryagain ' go back and try again.

我已经在我的代码上测试过了,它似乎工作得很好
我的代码在开始运行之前等待大约五六秒。

最新更新