错误的 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
据我所知:
- 有些文件名会返回两次。
- 有时返回的文件名总数正确,有时不正确。
- 如果返回的文件名总数正确:只是缺少一些文件名。
- 并非所有文档都会出现这种情况。但是如果它,它是可重现的。
Application.Documents.Count
总是 returns 打开文件的正确数量。
- 如果最终列出的文件名数等于实际打开文件数的两倍,则错误停止。
(我也在另一台没有任何附加组件的 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 声明为文档,但这并没有什么不同。
我的问题很简短。不幸的是,我的示例需要大量文本。
简短版
通常 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
据我所知:
- 有些文件名会返回两次。
- 有时返回的文件名总数正确,有时不正确。
- 如果返回的文件名总数正确:只是缺少一些文件名。
- 并非所有文档都会出现这种情况。但是如果它,它是可重现的。
Application.Documents.Count
总是 returns 打开文件的正确数量。- 如果最终列出的文件名数等于实际打开文件数的两倍,则错误停止。
(我也在另一台没有任何附加组件的 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 声明为文档,但这并没有什么不同。