如果 Windows 仍在使用该文件,请等待

Wait if Windows is still using the file

我有一个拆分 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 次或其他什么……目前不重要)并尝试重命名文件,如果每次都失败则退出子程序。
实际上,当 a = 3.
时,我在 Name 行收到错误 75 这意味着它已经循环过了 Name 行并失败,回到 tryagain: 然后失败但出错了。

男女同校 运行 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.

我已经在我的代码上对其进行了测试,它似乎工作正常。
我的代码在开始前等待大约五六秒 运行。