我有一个用于拆分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.
我已经在我的代码上测试过了,它似乎工作得很好
我的代码在开始运行之前等待大约五六秒。