私が見て理解したことから、これを行うための唯一の確実な方法は、実行中の単語のインスタンスを繰り返し処理し、次に各インスタンスを順番に殺して、次のインスタンスを取得していることを確認することです。
単語は、それ自体のすべてのインスタンスに対して実行中のオブジェクト テーブルにまったく同じ方法で登録されるため、最初に見ているインスタンスを閉じずにそれらを通過する方法はありません。
このアプローチの 1 つのオプションは、おそらく望ましくありませんが、アプリケーション インスタンスを強制終了している間にすべてのファイル名を取得してから、作成した 1 つのインスタンスにそれらすべてをロードし直すことです。
または、開いているファイルの名前がわかっている場合は、開いているファイル名で「getObject」を実行できます。これは、Word がそのドキュメント名を実行中のオブジェクト テーブルにプッシュするためです。
アクティブな x MFC サービスを作成しないと、やりたいことを実行できません。
お役に立てば幸いです。
編集:
フォーカスを変更するためにハンドルを取得するためのサブクラス化と Windows API について広範な議論がありました。http://www.xtremevbtalk.com/showthread.php?t=314637
最初にその頭に飛び込み、hwnd によって単語インスタンスを列挙できた場合は、それぞれに順番に焦点を合わせてから、ファイル名をリストすることができます。ただし、警告します。これは、本当に誤って何かを壊したいと思っている一部の人々だけが使用する、暗い魔法である厄介なサブクラスです。
いずれにせよ、1 つのインスタンスを確認したい場合は、kill、repeat、reopen を試してください:
このスレッドからの適応: http://www.xtremevbtalk.com/showthread.php?t=316776
Set objWordApplication = GetObject(, "Word.Application")
'//clear combobox
OpenDocs.Clear
'//add all open documents to combo box
Do While Not objWordDocument is nothing
For Each objWordDocument In objWordApplication.Documents
OpenDocs.AddItem objWordDocument.Name
Next objWordDocument
objWordApplication.Quit False
Set objWordApplication = Nothing
Set objWordApplication = GetObject(, "Word.Application")
loop
** use create object to open a new instance of word here and then go though
** your list of files until you have opened them all as documents in the new
** instance.