等待Windows是否仍在使用该文件

时间:2018-11-08 07:09:11

标签: excel vba file-rename xps

我有一个宏代码,用于拆分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吗?这是我可以看到这种行为的唯一原因。

对此我有哪些选择?如何确保我的代码一直等到可以重命名文件并继续运行?

1 个答案:

答案 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.

我已经在我的代码上对其进行了测试,并且看起来工作正常。
我的代码要等五六秒才能开始运行。