我的问题很简短。不幸的是,我的例子需要很多文字。
如果我刚打开一些文件,通常Application.Documents
工作正常。但过了一段时间(打开/关闭其他文件等),返回的枚举经常但不总是错误! (即使以下简单的代码示例也失败了。)
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
始终返回正确数量的打开文件。(我在没有任何附加组件的情况下在另一台PC上重现了这个。操作系统版本是:Windows 7,64位。)
我打开一些文件。示例文件名:
" 6-1-备件(RSM)-2.22-de-DE.docx"
" 6-1-备件(RSM)-2.22-zh-CN.docx"
" 6-1-备件(RSM)-2.22-en-US.docx"
我的程序返回:
6-1-spare parts(RSM)-2.22-en-US.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-de-DE.docx
Word.Application.Documents.Count:3
我打开另一个文件(" Test.docx")或通过CTRL + N创建一个新文档。我的程序返回:
Test.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-de-DE.docx
Word.Application.Documents.Count:4
我关闭" Test.docx"。我的程序返回:
6-1-spare parts(RSM)-2.22-en-US.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-de-DE.docx
Word.Application.Documents.Count:3
一个重复!
我重复这个,我的程序返回:
6-1-spare parts(RSM)-2.22-en-US.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-de-DE.docx
Word.Application.Documents.Count:3
两个重复!
我重复这个,我的程序返回:
6-1-spare parts(RSM)-2.22-en-US.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-de-DE.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-de-DE.docx
Word.Application.Documents.Count:3
三个重复!而且:现在列出的文件名数等于实际打开文件数的两倍!
我再次重复 ,我的程序返回:
6-1-spare parts(RSM)-2.22-en-US.docx
6-1备件(RSM)-2.22-zh-CN.docx
6-1备件(RSM)-2.22-de-DE.docx
Word.Application.Documents.Count:3
无论我现在做什么,返回的列表都是(并且仍然)正确,直到我关闭并重新打开文档。
答案 0 :(得分:0)
我听说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 As Document,但这并没有什么不同。