gpt4 book ai didi

vba - Word VBA 和多个单词实例

转载 作者:行者123 更新时间:2023-12-04 05:21:35 25 4
gpt4 key购买 nike

早上好。

我在让我的代码查找其他单词实例时遇到问题,并且在经过大量谷歌搜索后遇到了问题。

下面的我的代码将找到所有打开的 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

最佳答案

从我所看到和理解的情况来看,唯一可靠的方法是遍历正在运行的 word 实例,然后依次杀死每个实例以确保获得下一个实例。

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

这种方法的一种选择(可能并不理想)是在您终止应用程序实例时获取所有文件名,然后将它们全部加载回您创建的一个实例中。

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

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

我希望这是有帮助的。

编辑:

对子类化和 Windows API 进行了广泛的讨论,以获取句柄以改变焦点。 http://www.xtremevbtalk.com/showthread.php?t=314637

如果您首先深入研究该主题并能够通过 hwnd 枚举单词实例,那么您可能会依次关注每个单词,然后列出文件名。不过我确实警告过你;这是一些令人讨厌的子类化,这是只有一些真正想要不小心破坏东西的人才能玩的黑魔法。

无论如何,如果您想查看一个实例,杀死,重复,重新打开,请尝试以下操作:

改编自此线程: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.

关于vba - Word VBA 和多个单词实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com