遍历Word文档修订时遇运行时错误'5852',如何跳过幽灵修订?
解决Word VBA宏遍历幽灵修订触发运行时错误的问题
问题背景
为批量接受Word文档中所有格式类修订,编写了以下VBA宏:
Sub AcceptAllFormatChanges() Dim xRev As Revision Dim count As Integer count = 0 For Each xRev In ActiveDocument.Revisions If Not xRev Is Nothing Then If xRev.Type = wdRevisionProperty Then count = count + 1 xRev.Accept End If End If Next xRev MsgBox ("Accepted " & count & " format changes") End Sub
该宏在多数文档中运行正常,但在包含域引用的文档中,执行到If xRev.Type语句时会触发运行时错误'5852'——请求的对象不可用。排查确认这是Word的Bug:由插入域(如跨章节引用)操作产生的「幽灵修订」导致,这类修订无法通过审阅面板正常遍历,且修订数会在面板中跳变,仅手动删除重建相关域可临时修复文档,但无法复现Bug提交官方。
解决方案
通过添加错误捕获机制,在访问修订属性时跳过无效的幽灵修订,避免触发错误。修改后的宏代码如下:
Sub AcceptAllFormatChanges_Safe() Dim xRev As Revision Dim count As Integer Dim revType As WdRevisionType count = 0 For Each xRev In ActiveDocument.Revisions ' 捕获访问修订属性时的错误,跳过无效修订 On Error Resume Next revType = xRev.Type If Err.Number = 0 Then If revType = wdRevisionProperty Then count = count + 1 xRev.Accept End If End If On Error GoTo 0 ' 恢复默认错误处理 Next xRev MsgBox ("Accepted " & count & " format changes") End Sub
关键修改说明
- 使用
On Error Resume Next临时跳过访问修订属性时的错误 - 先尝试获取
xRev.Type并检查错误码,仅当无错误时才判断是否为格式修订并接受 - 处理完当前修订后用
On Error GoTo 0恢复默认错误处理,避免后续代码忽略其他正常错误
内容的提问来源于stack exchange,提问作者treuss
相关产品推荐
相关产品推荐

