2012-11-29 155 views
2

早上好。Word VBA和多字实例

我有让我的代码中查找单词的其他情况下的问题,并击中后多谷歌搜索的砖墙。下面

我的代码会发现所有打开的Word文档,并将其填充到一个组合框。

我的问题是,我们有应用程序(我对这些没有控制),将在一个新的实例中打开Word文档,因此我的代码不会找到/控制这些文件。

任何想法?

Dim objWordDocument As Word.Document 
Dim objWordApplication As Word.Application 


'//find all open word documents 
Set objWordApplication = GetObject(, "Word.Application") 

'//clear combobox 
    OpenDocs.Clear 

'//add all open documents to combo box 

     For Each objWordDocument In objWordApplication.Documents 

      OpenDocs.AddItem objWordDocument.Name 

     Next objWordDocument 

回答

2

从我所看到的,并体会到,只有确保消防方式做,这是通过文字的运行实例进行迭代,然后杀死每一个反过来,以确保你所得到的下一个例子。

由于在运行对象表字寄存器本身每个实例完全相同的方式,有没有办法通过他们获得不首先关闭你看一个。

一种选择这种方法,这可能是不可取的,是当你在杀死应用程序实例来获取所有的文件名,然后加载它们在一个实例您创建的所有回来。

或者,如果您知道打开的文件的名称,则可以通过打开的文件名获取'getObject',因为Word会将其文档名称推送到正在运行的对象表中,可悲的是,这听起来不像您。

无需编写一个Active X MFC的服务,你不会是能够做你正在寻找做什么。

我希望这会有帮助。

编辑:

有关于子类和Windows API的广泛讨论,以获得手柄,以改变焦点。 http://www.xtremevbtalk.com/showthread.php?t=314637

如果你先弄清楚了这个问题,并且能够通过hwnd枚举word实例,那么你可能会依次集中每一个,然后列出文件名。我虽然警告过你;这是一些令人讨厌的子类,这是一种黑暗的魔法,只有一些真正想要意外打破东西的人才会玩。

在任何情况下,如果你想借此看看一个实例,杀,重复,重新打开试试这个:

从这个线程改编: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. 
+0

感谢您的答复@ POW-伊恩。你是正确的,我不会知道二次打开的文件的名称。我会考虑杀死我的代码/应用程序,并让它在seocnd实例中重新打开,看看是否有效。有关这样做的任何提示? – Mikey

+0

好吧,你可以杀死它,并很容易地获得文件名,但是使相同的实例恢复生命,以便创建它的应用程序/进程会认识到它超出了vba中可能的范围,除非存在一种子类化的方法。我会详细说明抢劫和杀戮。 –

+0

非常感谢您的帮助!一旦我有15个代表,我会将你的帖子标记为有用:) – Mikey