VBA单词“;对于每一个“;查看修订集时,循环将无限大

VBA单词“;对于每一个“;查看修订集时,循环将无限大,vba,ms-word,Vba,Ms Word,我的代码填充Word文档中修订的作者列表: Private Sub Get_Revisions_Authors() Dim r As Revision Set doc = ActiveDocument On Error Resume Next Dim Authors As New Collection For Each r In doc.content.Revisions Authors.Add r.Author, r.Author

我的代码填充Word文档中修订的作者列表:

Private Sub Get_Revisions_Authors()
    Dim r As Revision
    Set doc = ActiveDocument

    On Error Resume Next

    Dim Authors As New Collection
    For Each r In doc.content.Revisions
        Authors.Add r.Author, r.Author
    Next r
代码一直运行良好,直到它被一个新文档卡住。在这种情况下,“for-each”循环只是无限地一次又一次地挑选一组五个修订。 将代码重写为类似以下内容可以解决问题:

Private Sub Get_Revisions_Authors()
    Set doc = ActiveDocument

    On Error Resume Next

    Dim Authors As New Collection
    Dim i As Long
    For i = 1 To doc.content.Revisions.Count
        Authors.Add doc.content.Revisions(i).Author, doc.content.Revisions(i).Author
    Next i
稍微重写代码以删除“出错时继续下一步”行,但仍在无限期选择修订,没有任何错误:

Private Sub Get_Revisions_Authors()
Dim r As Revision
    Set doc = ActiveDocument
Dim bAdd As Boolean
Dim i As Long
    For Each r In doc.content.Revisions
        bAdd = True
        For i = 1 To Authors.Count
            If r.Author = Authors(i) Then
                bAdd = False
                Exit For
            End If
        Next i
        If bAdd Then
            Authors.Add r.Author, r.Author
        End If
    Next r

但是也许有人知道,如何找出第一个版本的代码的问题所在?

删除
错误,然后继续下一步
,看看是否会弹出错误。阅读第二个版本中的循环之前和之后的内容,您可能会受益于add
Debug.Print doc.content.Revisions.Count
。也许这有助于您理解。@Warcupine“On Error Resume Next”用于向authors集合添加作者,而不检查是否已经存在这样的作者,如果没有此行,则会发生添加错误。删除这一行并重写代码以包含“如果不是作者,则添加”检查后,循环选择修订将无限期进行,没有任何错误。@Timothyrylat adding Debug.Print doc.content.revisions.Count在循环之前和之后只打印相同的数字。。。我认为这是应该的