2013-02-14 21 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

相關問題