错误的 Application.Documents 枚举

Wrong Application.Documents enumeration

我的问题很简短。不幸的是,我的示例需要大量文本。

简短版

通常 Application.Documents 如果我只是打开了一些文件就可以正常工作。但是一段时间后(open/close 其他文件等)返回的枚举 经常但并非总是 错误! (即使是下面的简单代码示例也会失败。)

Sub test_SaveAllUnsavedDocuments()

    Dim Doc As Object

    For Each Doc In Word.Application.Documents
        Debug.Print Doc.Name
    Next
    Debug.Print "Word.Application.Documents.Count: " & Word.Application.Documents.Count

End Sub

据我所知:

(我也在另一台没有任何附加组件的 PC 上复制了这个。OS 版本是:Windows 7、64 位。)

长版

我打开了一些文件。文件名示例:

"6-1-spare parts (RSM)-2.22-de-DE.docx"
"6-1-spare parts (RSM)-2.22-en-GB.docx"
"6-1-spare parts (RSM)-2.22-en-US.docx"

我的程序returns:

6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-de-DE.docx
Word.Application.Documents.Count: 3

我打开另一个文件 ("Test.docx") 或通过 CTRL+N 创建一个新文档。我的程序 returns:

Test.docx
6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-de-DE.docx
Word.Application.Documents.Count: 4

现在错误开始了

我关闭"Test.docx"。我的程序 returns:

6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-de-DE.docx
Word.Application.Documents.Count: 3

一个重复

我重复这个和我的程序returns:

6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-de-DE.docx
Word.Application.Documents.Count: 3

两次重复

我重复这个和我的程序returns:

6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-de-DE.docx
6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-de-DE.docx
Word.Application.Documents.Count: 3

三个重复!并且:现在列出的文件名数量等于实际打开文件数量的两倍!

我再重复一次和我的程序returns:

6-1-spare parts (RSM)-2.22-en-US.docx
6-1-spare parts (RSM)-2.22-en-GB.docx
6-1-spare parts (RSM)-2.22-de-DE.docx
Word.Application.Documents.Count: 3

无论我现在做什么,返回的列表 都是(并且保持)正确的,直到我关闭并重新打开文档。

我听说过 For ..Each 循环不可靠,但这是我第一次遇到实际示例。以下代码不会产生该错误。

Sub test_SaveAllUnsavedDocuments()

Dim Doc As Object
Dim i As Integer

For i = 1 To Word.Application.Documents.Count 
    Debug.Print Documents(i).Name
Next
Debug.Print "Word.Application.Documents.Count: " & Word.Application.Documents.Count

End Sub

起初我尝试将 Doc 声明为文档,但这并没有什么不同。