我的问题很短。不幸的是,我的例子需要大量的文本。
短版
通常,如果我只打开了一些文件,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总是返回正确的打开文件数。(我在另一台电脑上复制了这个,没有任何附加的Ons。)操作系统版本是: Windows 7,64位。)
长版
我打开一些文件。示例文件名:
“6-1-备件(RSM)-2.22-de-DE.docx” “6-1-备件(RSM)-2.22-en-GB.docx” “6-1-备件(RSM)-2.22-en-US.docx”
我的程序返回:
6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-GB.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-en-US.docx 6-1-备件(RSM)-2.22-en-GB.docx 6-1-备件(RSM)-2.22-de-DE.docx Word.Application.Documents.Count: 4
现在错误开始了
我结束了"Test.docx“。我的程序返回:
6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-GB.docx 6-1-备件(RSM)-2.22-de-DE.docx Word.Application.Documents.Count: 3
有一个,一个重复的!
重复一遍,我的程序就会返回:
6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-GB.docx 6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-GB.docx 6-1-备件(RSM)-2.22-de-DE.docx Word.Application.Documents.Count: 3
有两个副本,!
重复一遍,我的程序就会返回:
6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-GB.docx 6-1-备件(RSM)-2.22-de-DE.docx 6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-GB.docx 6-1-备件(RSM)-2.22-de-DE.docx Word.Application.Documents.Count: 3
这里有的三个副本,!和:现在列出的文件名的数量等于实际打开的文件数的两倍!
我再次重复这个,和我的过程返回:
6-1-备件(RSM)-2.22-en-US.docx 6-1-备件(RSM)-2.22-en-GB.docx 6-1-备件(RSM)-2.22-de-DE.docx Word.Application.Documents.Count: 3
无论我现在做什么,返回的列表都是(并且仍然)正确的,直到我关闭并重新打开文档。
发布于 2017-03-10 08:46:32
我听说过For ..Each循环不可靠,但这是我第一次遇到实际的示例。下面的代码不会产生该错误。
亚test_SaveAllUnsavedDocuments() Dim Doc作为对象Dim I作为整数I=1 To Word.Application.Documents.Count Debug.Print Documents(i).Name Next Debug.Print " Word.Application.Documents.Count:“&Word.Application.Documents.Count 结束子对象
起初,我试图将Doc声明为Document,但这并没有什么区别。
https://stackoverflow.com/questions/42643082
复制相似问题