0

我对这段代码有疑问,老实说,我不太确定问题出在哪里。最初的问题是我编写的应用程序打开了一个 word 实例,但是如果机器上已经有一个 word 实例,它只会打开第二个实例,但它不会插入我在该实例中创建的文档. 我最终得到的是两个窗口,一个是 Word 本身,没有文档,一个是 Word 和文档。他们原来运行的 word 应用程序仍然正常运行,在它自己的 Word/文档组合中,它应该有。我试图通过 getObject 获取正在运行的 Word 实例来解决这个问题,但它只是不断返回失败。

我读到你必须给单词焦点然后失去焦点才能让它与 ROT 一起列出,但即使等待 10 分钟后,它仍然返回以下错误:

AnswerWizard = {"错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回。"}

我想知道我是否缺少关于 getObject 以及链接到导致此错误的另一个 Office 应用程序实例的能力?

信息:

Windows 7的

词 2003

桌面 VB 应用程序

代码:

Private wordApp As Word.Application

Public Sub New()
    Try
        wordApp = CType(GetObject(, "Word.Application"), Word.Application)
    Catch ex As Exception
        wordApp = New Word.Application
    End Try
End Sub

注意:尝试使用和不使用 CType 都没有关系。如果没有运行单词的实例,它确实有效,但这只是因为它属于我的例外。

问题:

如果我尝试链接到已经运行的 Word 实例,代码将运行而不会引发错误,但我得到 AnswerWizard = {"Error HRESULT E_FAIL has been returned from a call to a COM component."}。然后我的代码继续打开一个空白单词和单词/文档的实例,总共有两个窗口,而应该只有一个。我错过了关于 getObject 的一些东西吗?

4

1 回答 1

1

Office 自动化服务器的 GetObject 和 CreateObject 行为中,Microsoft 建议避免使用 GetObject()。我同意这一点:除非您需要在用户会话中与文档进行交互,否则打开第二个文档可能会受到用户的干扰。一个独立的实例可以在不可见的情况下继续工作,或者锁定用户界面。

我很熟悉另一个 Word 实例运行时的问题,尽管是在 VBA 环境中。

许多在 Office 应用程序文档中看起来像对象的关键字实际上是 Application 对象的方法 - Word 中最常见的方法之一是Selection. 使用这些方法指定您的应用程序对象至关重要:wordApp.Selection,否则该方法将应用于正在运行的 Word 的第一个实例,通常会导致错误。

于 2013-02-16T22:31:29.393 回答