VBA单词“;对于每一个“;查看修订集时,循环将无限大
我的代码填充Word文档中修订的作者列表: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
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
但是也许有人知道,如何找出第一个版本的代码的问题所在?删除
错误,然后继续下一步
,看看是否会弹出错误。阅读第二个版本中的循环之前和之后的内容,您可能会受益于addDebug.Print doc.content.Revisions.Count
。也许这有助于您理解。@Warcupine“On Error Resume Next”用于向authors集合添加作者,而不检查是否已经存在这样的作者,如果没有此行,则会发生添加错误。删除这一行并重写代码以包含“如果不是作者,则添加”检查后,循环选择修订将无限期进行,没有任何错误。@Timothyrylat adding Debug.Print doc.content.revisions.Count在循环之前和之后只打印相同的数字。。。我认为这是应该的