Workbook.UpdateFromFile触发运行时停止问题的修复方案咨询
修复ReadOnly工作簿UpdateFromFile后的执行问题
原代码存在两个核心问题:
Stop语句会强制中断程序执行,导致UpdateFromFile后的代码无法运行UpdateFromFile仅重载内存中的工作簿内容,不会触发Workbook.Open/Workbook.Activate这类常规事件,无法通过这些事件衔接后续逻辑
以下是几种可行的修复方案:
方案1:移除Stop直接衔接逻辑
UpdateFromFile是同步执行方法,执行完成后内存中的工作簿已完成更新,直接在其后编写后续逻辑即可:
If ThisWorkbook.ReadOnly = True Then ThisWorkbook.UpdateFromFile ' 此处编写更新后需要执行的代码 MsgBox "工作簿已从源文件完成更新" End If
方案2:校验更新状态后执行逻辑
如果需要确保更新操作确实完成,可以通过文件修改时间或工作簿属性校验:
If ThisWorkbook.ReadOnly = True Then Dim originalModifyTime As Date originalModifyTime = FileDateTime(ThisWorkbook.FullName) ThisWorkbook.UpdateFromFile ' 循环等待更新完成(设置超时避免无限等待) Dim waitCounter As Integer waitCounter = 0 Do While FileDateTime(ThisWorkbook.FullName) > originalModifyTime And waitCounter < 100 DoEvents ' 释放CPU资源,防止程序假死 waitCounter = waitCounter + 1 Loop ' 校验通过后执行后续逻辑 If waitCounter < 100 Then Debug.Print "工作簿更新完成" Else Debug.Print "工作簿更新超时" End If End If
方案3:延迟执行后续逻辑
针对大文件加载慢的场景,可通过Application.OnTime延迟触发后续逻辑:
If ThisWorkbook.ReadOnly = True Then ThisWorkbook.UpdateFromFile ' 延迟1秒执行后续逻辑,可根据实际情况调整时长 Application.OnTime Now + TimeValue("00:00:01"), "PostUpdateProcedure" End If ' 单独定义更新后的处理子程序 Sub PostUpdateProcedure() ' 此处编写更新后的处理代码 MsgBox "延迟执行的工作簿更新后逻辑" End Sub
内容的提问来源于stack exchange,提问作者OTstand
相关产品推荐
相关产品推荐

