如果 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.
我已经在我的代码上对其进行了测试,它似乎工作正常。
我的代码在开始前等待大约五六秒 运行。
我有一个拆分 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.
我已经在我的代码上对其进行了测试,它似乎工作正常。
我的代码在开始前等待大约五六秒 运行。