徵狀
當您執行使用自動化控制 Microsoft Word 的 Microsoft Visual Basic 程式碼時,您可能會收到下列其中一則錯誤訊息:錯誤訊息 1
執行時間錯誤 "-2147023174" (800706ba)自動化錯誤
錯誤訊息 2
執行時間錯誤 "462":遠端伺服器電腦不存在或無法使用
原因
Visual Basic 已建立對 Word 的參照,因為程式碼會呼叫 Word 物件、方法或屬性,而不需使用 Word 物件變數來限定它。 Visual Basic 在您結束程式前,不會放開這個參照。 當程式碼執行多次時,這個失控參考會與自動化程式碼發生衝突。
解決方案
修改程式碼,讓每個 Word 物件、方法或屬性的呼叫都符合適當的物件變數。
狀態
產生此錯誤是系統刻意為之。
其他相關資訊
若要自動化 Word,您必須建立物件變數,通常是指 Word 應用程式或檔物件。 然後,您可以設定其他物件變數,以參照 Word 物件模型中的選取範圍、範圍或其他物件。 當您撰寫程式碼以使用 Word 物件、方法或屬性時,您應該總是在通話前加上適當的物件變數。 如果您沒有這樣做,Visual Basic 就會使用一個隱藏的全域變數參照,將它設定為目前執行中的實例。 如果是關閉 Word,或者如果已經釋放已宣告的物件變數,則隱藏的全域變數現在會參照無效(損毀)物件。 再次執行自動化程式碼時,對這個隱藏物件變數的呼叫將會失敗,並出現上述的錯誤。下列步驟說明如何再現這個問題,以及如何修正。
再現行為的步驟
-
在 Visual Basic 中開始新的標準 EXE 專案。 預設會建立 Form1。
-
按一下 [專案] 功能表中的 [參照],然後按一下下列其中一個選項:
-
如果是 Office Word 2007,請按一下 [ Microsoft Word 12.0 物件程式庫]
-
若是 Word 2003,按一下 [ Microsoft Word 11.0 物件程式庫]
-
若是 Word 2003,按一下 [ Microsoft Word 10.0 物件程式庫]
-
若是 Word 2000,請按一下 [ Microsoft Word 9.0 物件程式庫]。
-
若是 Word 97,請按一下 [ Microsoft Word 8.0 物件程式庫]。
-
-
在 Form1 上放置一個命令按鈕。
-
將下列程式碼複製到 Form1 的程式碼視窗:
Option Explicit Private Sub Command1_Click() Dim oWord As Word.Application Dim oDoc As Word.Document Dim oRange as Word.Range Set oWord = CreateObject("Word.Application") With oWord .Visible = True .Activate .WindowState = wdWindowStateNormal End With Set oDoc = oWord.Documents.Add MsgBox "Document open", vbMsgBoxSetForeground With oDoc .PageSetup.LeftMargin = InchesToPoints(1.25) End With ' This example inserts text at the end of section one. Set oRange = ActiveDocument.Sections(1).Range With oRange .MoveEnd Unit:=wdCharacter, Count:= -1 .Collapse Direction:=wdCollapseEnd .InsertParagraphAfter .InsertAfter "End of section." End With With oDoc .Saved = True End With Set oRange = Nothing Set oDoc = Nothing oWord.Quit Set oWord = Nothing End Sub
-
按一下 [ 執行 ] 功能表上的 [ 開始 ] 或按 F5 鍵,啟動程式。
-
按一下命令按鈕。 不會發生錯誤。 不過,已建立對 Word 的參照,但尚未發佈。
-
再次按一下該命令按鈕,並注意您會收到先前所述的錯誤。注意: 發生錯誤的原因是,程式碼參照的是 InchesToPoints 方法,但在呼叫前沒有 oWord 物件變數。
-
停止專案並變更下列行:
.PageSetup.LeftMargin = InchesToPoints(1.25)
至
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
再次執行程式。 接著,按一下命令按鈕。 不會發生錯誤。
-
再次按一下該命令按鈕,請注意您會收到錯誤。注意: 發生錯誤的原因是,程式碼參照了 ActiveDocument 區段一個範圍物件,但在通話之前,沒有 oWord 物件變數。
-
停止專案並變更下列行:
Set oRange = ActiveDocument.Sections(1).Range
至
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
再次執行程式。 請注意,您可以多次執行程式碼,而不會發生錯誤。
建立 Visual Basic 專案自動化 Word 時,如果您的專案具有 Microsoft Word 物件程式庫的參考,word 物件模型的物件、方法和屬性範例程式碼可從 Word 說明檔案中取得。 當游標位於您程式碼中的某個鍵字上方時,按下 F1 鍵,就會看到任何適用的解說文字。[說明] 主題中的範例代碼就是 Microsoft Word Visual Basic for Applications 程式碼。 它不會顯示您的 Visual Basic 程式碼所需的物件參照。 您將需要根據需要新增限定詞。
參考
如需其他資訊,請參閱 Microsoft 知識庫中的下列文章:
178510 PRB:物件 ' _Global」的 Excel 自動化方法失敗
167223 Microsoft Office 97 自動化說明檔案可供使用如需有關 Office 應用程式自動化的其他資訊,請按一下下方的文章編號,以查看 Microsoft 知識庫中的文章:
222101 HOWTO:尋找及使用 Office 物件模型檔