首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Word VBA和多个Word实例

Word VBA和多个Word实例
EN

Stack Overflow用户
提问于 2012-11-30 03:49:47
回答 2查看 6.4K关注 0票数 2

早上好。

我有一个问题,让我的代码来查找其他实例的word,并遇到了很多谷歌搜索后的砖墙。

下面的代码将查找所有打开的word文档,并将它们填充到一个组合框中。

我的问题是,我们的应用程序(我无法控制这些应用程序)将在新实例中打开word文档,因此我的代码无法找到/控制这些文档。

有什么想法吗?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-30 04:57:19

根据我所看到的,并逐渐理解,唯一确定的方法是迭代word的运行实例,然后依次杀死每个实例,以确保您将获得下一个实例。

由于word对自身的每个实例都以完全相同的方式在运行对象表中注册,因此如果不先关闭您正在查看的实例,就无法通过它们。

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

或者,如果你知道打开文件的名称,你可以通过打开文件的名称“getObject”,因为Word会将它的文档名称推入运行对象表中,不幸的是,这听起来不像你的情况。

如果不编写active x MFC服务,您将无法完成您想要做的事情。

我希望这能对你有所帮助。

编辑:

关于子类化和windows API获取句柄以改变焦点的讨论非常广泛。http://www.xtremevbtalk.com/showthread.php?t=314637

如果您首先深入到该标题,并能够通过hwnd枚举单词instance,那么您可能会依次关注每个实例,然后列出文件名。但我要警告你,这是一些讨厌的子类化,这是黑魔法,只有那些真正想要无意中破坏东西的人才会使用。

在任何情况下,如果您想查看一个实例,终止、重复、重新打开,请尝试以下操作:

改编自这个主题:http://www.xtremevbtalk.com/showthread.php?t=316776

代码语言:javascript
复制
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.
票数 3
EN

Stack Overflow用户

发布于 2019-01-29 03:13:42

这是一个旧的线程,但是我也需要迭代Word实例并在这里颠簸。

按照@Pow-Ian的建议,我试着去做

如果您首先深入到该标题,并且能够通过hwnd枚举单词

,那么您可能会依次关注每个实例,然后列出文件名。

虽然我已经设法获得了所有的句柄,但我发现了一种通过AccessibleObjectFromWindow处理办公应用程序的更简单的策略,我们的问题现在已经解决了。

另外,我相信显示@Pow-lan's的代码在

代码语言:javascript
复制
Do While Not objWordDocument is nothing

并且应该是:

代码语言:javascript
复制
Do While Not objWordApplication is nothing
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13633551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档