如何修改VBA代码实现工作簿只读时重试3次后弹出MsgBox?
VBA 工作簿占用重试逻辑修改方案
核心修改思路
- 新增整数类型的重试计数器,初始值为0,控制累计最多重试3次
- 首次检测到工作簿为只读状态时不直接弹窗退出,先累加重试计数
- 未达到重试上限时,调用
Application.Wait方法暂停5秒,搭配DoEvents释放系统控制权,避免程序界面假死 - 等待结束后重新校验工作簿只读状态,若累计3次重试仍为占用状态,再弹出原有错误提示并终止过程
可直接替换的代码
将你原有单独判断wBook.ReadOnly的If块,替换为以下代码即可:
Dim retryCount As Integer retryCount = 0 Do While wBook.ReadOnly retryCount = retryCount + 1 ' 达到最大重试次数后弹窗退出 If retryCount = 3 Then MsgBox "Database is in use. Please try after sometimes.", vbOKOnly + vbCritical, "error" ' 若当前wBook是你代码中以只读方式打开的实例,建议加下行关闭残留对象 ' wBook.Close SaveChanges:=False Exit Sub End If ' 间隔5秒 Application.Wait Now + TimeSerial(0, 0, 5) DoEvents Loop
注意事项
如果你的
wBook对象是通过Workbooks.Open方法打开的,上述代码中等待后不会自动更新已打开工作簿的读写状态,需要在等待逻辑后先关闭当前只读打开的工作簿实例,再重新打开目标文件校验ReadOnly属性,否则重试检测会一直命中只读状态。
原代码中写的vbookonly为拼写误差,VBA内置常量为vbOKOnly,代表消息框只显示确定按钮,代码中已做修正。
内容的提问来源于stack exchange,提问作者Jonathan Kaufman
相关产品推荐
相关产品推荐

