我正在尝试清理我办公室使用的一些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
答案 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