【发布时间】:2010-10-05 01:10:57
【问题描述】:
连接到正在运行的 MS Word 实例并将此应用程序置于最前面的“正确”(推荐)方法是什么?我正在从 VBA 应用程序中执行以下操作:
...
objWord = GetObject ("Word.Application")
if (objWord is nothing) then
objWord = CreateObject("Word.Application")
end if
objWord.Activate()
objWord.Visible = true
objWord.WindowState = 1 'maximized
...
在带有 Word 2007 的 Windows XP 上运行,这在大多数情况下都有效 - 但有时无法将 Word 窗口置于最前面(而是在任务栏中闪烁 Word 的最小化图标)。
注意:我通过使用 FindWindow Win API 调用部分解决了这个问题:
hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then
SetForegroundWindow (hwnd)
end if
这不是 100%,因为(正如 drventure 指出的那样),如果 Word 的多个实例正在运行,您无法确定您将处理哪个。因为当我的代码启动 Word 时,它首先使用 GetObject,然后如果失败则使用 CreateObject,只要有一个 Word 实例开始运行,我就可以了。
【问题讨论】:
-
您是否尝试检查 WindowState,然后重试最大化?
-
当我检查窗口状态时,它总是 1(最大化)。此外,当我最小化调用应用程序时,Word 会最大化打开。所以,我认为问题不在于窗口状态,而在于 z 顺序。但我认为 Activate() 会将 Word 带到最前面?
标签: vba ms-word ole-automation