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
相关产品推荐
相关产品推荐

