Word 2010中的VBA不会迭代所有打开的文档

时间:2013-09-10 17:19:33

标签: vba word-vba

我正在尝试清理我办公室使用的一些Word宏。宏删除水印,保存Word文档并打印它。

我遇到的问题是我写的宏不会遍历所有文档。如果我有5个打开的文件,它只会3次。这让我发疯了。

以下是相关代码。为什么它不会从5到1一直倒计时?它在3点后停止。

    Sub Test()
     For Each doc In Documents
      MsgBox Documents.Count
      doc.Close SaveChanges:=wdDoNotSaveChanges
     Next doc
    End Sub

2 个答案:

答案 0 :(得分:3)

关闭后您的文档会消失,并在Documents循环期间从For Each移除。

您希望迭代整个组,而不是从头开始。删除项目时使用For Each会导致某些项目过早被删除,从而导致问题,并且很难从代码角度了解发生了什么。

为了解释这一点,我通常会向后迭代:

Sub Test()
    Set mydocs = Documents
    Debug.Print mydocs.Count

    For i = mydocs.Count To 1 Step -1
        Debug.Print Documents.Count
        mydocs(i).Close SaveChanges:=wdDoNotSaveChanges

    Next i

End Sub

这样做的好处是可以更清楚地从编程的角度来看是什么。

答案 1 :(得分:0)

更简单的方法:

Sub CloseAll()
  Do Until Documents.Count = 0
    Debug.Print Documents.Count
    Documents(1).Close SaveChanges:=wdDoNotSaveChanges
  Loop
End Sub