You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA操作Word Revisions对象时遭遇的异常问题

Word VBA遍历Revisions集合时的异常问题

我查阅过关于Word Revisions对象的相关技术帖子,但未找到微软官方针对这个“意外特性”的说明。在遍历Revisions集合时,一旦遇到标记为“已删除”的Revision对象,后续集合中的非删除对象都会出现异常——全部与第一个已删除对象之前的最后一个Revision属性完全一致。

我的测试代码如下:

Sub TestRevs()
    Dim lRev&, oRev As Revision, lNdx&, oRevs As Revisions
    
    
    On Error GoTo oops
    If mDoc Is Nothing Then Set mDoc = ActiveDocument
    
    Set oRevs = mDoc.Revisions
    On Error GoTo oops
    
    For lRev = 1 To oRevs.Count
        Set oRev = oRevs(lRev)
        lNdx = oRev.Index
        Debug.Print lRev, lNdx
skip:
    
        DoEvents
    Next lRev

finish:
    
    On Error GoTo 0
    Exit Sub

oops:
    
    If Err.Number = 5852 Then
        Resume skip
    Else
        Debug.Assert False
        Resume
    End If
    
End Sub

实际运行中,当遇到返回<This object has been deleted>的Revision对象后,后续所有未被标记为“已删除”的Revision对象,属性均与第一个“已删除”对象之前的最后一个Revision完全相同。比如示例中第18个对象为已删除状态,后续非删除对象的属性都和第17个对象一致,Debug输出如下:

lRev          oRev.Index
 1             1 
 2             2 
 3             3 
 4             4 
 5             5 
 6             6 
 7             7 
 8             8 
 9             9 
 10            10 
 11            11 
 12            12 
 13            13 
 14            14 
 15            15 
 16            16 
 17            17 
 19            17 
 21            17 
 23            17 
 25            17 
 27            17 
 29            17 

欢迎提供任何帮助,感谢关注!

更新说明

  • 关于“已删除对象”:mDoc.Revisions是Word生成的所有跟踪更改集合,遍历集合时将每个元素赋值给oRev。示例中当lRev=18时,oRev=oRevs(18),VBE本地窗格显示oRev为“已删除对象”,所有属性均为<This object has been deleted>,尝试获取任何属性都会触发运行时错误。
  • 复现步骤:打开已启用跟踪更改的文档,或开启“跟踪更改”后进行一些编辑操作,再运行上述代码即可复现。Revisions对象本应包含所有单独的跟踪更改,单个Revision对象对应一项具体更改的详细信息,无其他特殊操作要求。

内容的提问来源于stack exchange,提问作者pdtcaskey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:55:59