【问题标题】:VBA in Word 2010 will not iterate over all open documentsWord 2010 中的 VBA 不会遍历所有打开的文档
【发布时间】:2015-09-12 08:51:02
【问题描述】:

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

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    您的文档在For Each 循环期间关闭并从Documents 中删除时消失。

    您希望遍历整个组,而不是从头开始。删除项目时使用 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
    

    这样做的好处是从编程的角度更清楚正在发生的事情。

    【讨论】:

      【解决方案2】:

      更简单的方法:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多