2013-02-14 134 views
0

我遇到了这一点代码的问题,我不太确定问题是诚实的。原来的问题是我写的应用程序打开了一个单词的实例,但是如果机器上已经有单词的实例,它只会打开第二个实例,但它不会插入我在该实例中创建的文档。我最终得到的是两个窗口,一个是Word本身,没有文档,另一个是Word和文档。它们的原始运行字应用程序仍然像正常情况一样运行,在它自己的Word/Document组合中,就像它应该具有的一样。我尝试通过getObject获取Word的运行实例来解决此问题,但它只是不断返回失败。GetObject返回H_RESULT E_FAIL

,我读了你必须给字焦点,然后失去焦点为它获得与ROT上市,但即使是在等待10分钟后,仍返回以下错误:

AnswerWizard = {“错误HRESULT E_FAIL已从调用COM组件返回。“}

我想知道是否有我丢失的关于getObject和能够链接到导致此错误的Office应用程序的另一个实例吗?

信息:

Windows 7的

Word 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 = {“错误HRESULT E_FAIL已从调用返回到COM组件。“}。然后,我的代码继续打开一个空白单词和单词/文档的实例,总共只有两个窗口应该只有一个。我错过了关于getObject的东西吗?

回答

1

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

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

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

+0

只是让我得到你说的话,我应该创建一个Dim wordapp的实例作为New Word.Application,然后使用wordApp.Selection生成我的文档?我尝试的最终目标是停止这个双重开放问题。 – Gyhth 2013-02-18 01:34:40

+0

你明白我的理解。尽管我没有双重开放的问题。 MS说,Word 2003以无形方式打开(我正在使用Vista/Word 2007),所以当您将其显示为可见时,可能会出现问题... – grahamj42 2013-02-18 06:01:47

+0

我没有想到这是诚实的。我拥有的是每次生成新文档时调用的函数,并且每次创建新文档时都会将wordApp.Visible设置为true。我是否应该只在整个事件中调用wordApp.Visible一次,还是在后面为所有文档设置可见性? – Gyhth 2013-02-19 15:07:30

相关问题