错误的Application.Documents枚举

时间:2017-03-07 08:00:08

标签: vba ms-word word-vba word-2010

我的问题很简短。不幸的是,我的例子需要很多文字。

短版

如果我刚打开一些文件,通常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

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

1 个答案:

答案 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,但这并没有什么不同。