我有一个宏代码,用于拆分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次,或者目前不重要),然后尝试重命名该文件,如果每次失败均退出子程序。
实际上,当Name
出现a = 3
行时出现错误,错误为75。
这意味着它已经循环经过Name
行并失败,然后又回到tryagain:
,然后失败但出错了。
男女生在第一次失败时会运行On Error GoTo 0
吗?这是我可以看到这种行为的唯一原因。
对此我有哪些选择?如何确保我的代码一直等到可以重命名文件并继续运行?
答案 0 :(得分:2)
我找到了解决方法。
我创建了一个错误处理程序,等待它,然后恢复到代码。
'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.
我已经在我的代码上对其进行了测试,并且看起来工作正常。
我的代码要等五六秒才能开始运行。