症狀
在執行使用 Automation 來控制 Microsoft Excel 的程式碼時,可能會發生以下其中一種錯誤:
在 Microsoft Excel 97 及後續版本中,您會收到以下其中一種錯誤訊息:
錯誤訊息 1
注意
Run-time 錯誤 '1004':
物件「_Global」的方法<名稱>失敗
錯誤訊息 2
注意
應用程式定義錯誤或物件定義錯誤
在 Microsoft Excel 95 中,您會收到以下其中一種錯誤訊息:
錯誤訊息 1
注意
執行時誤差 '-2147023174'
OLE 自動化錯誤
錯誤訊息 2
注意
執行時誤差 '462':
遠端伺服器機器不存在或無法使用。
原因
Visual Basic 因為有一段程式碼呼叫 Excel 物件、方法或屬性,卻未用 Excel 物件變數加限定該元素,而建立了對 Excel 的參考。 Visual Basic 在你結束程式後才會釋出這個參考資料。 當程式碼執行超過一次時,這種錯誤的引用會干擾自動化程式碼。
解決方式
為了解決這個問題,修改程式碼,使每個對 Excel 物件、方法或屬性的呼叫都加上適當的物件變數作為限定。
狀態
這個行為是由於預設的設計所致。
更多資訊
要自動化 Microsoft Excel,你需要建立一個物件變數,通常指向 Excel 應用程式物件或 Excel 工作簿物件。 其他物件變數可設定為參考工作表、範圍或 Microsoft Excel 物件模型中的其他物件。 當你寫程式碼來使用 Excel 物件、方法或屬性時,你應該總是在呼叫前加上適當的物件變數。 如果沒有,Visual Basic 會自行建立對 Excel 的參考。 這個參考可能會在你嘗試執行自動化程式碼多次時造成問題。 請注意,即使程式碼行以物件變數開頭,仍可呼叫中間未包含物件變數的 Excel 物件、方法或屬性。
以下步驟說明如何重現此問題以及如何修正。
重現行為的步驟
在 Visual Basic 中啟動一個新的 Standard EXE 專案。 Form1 是預設建立的。
在 專案 選單中,點選 參考文獻,然後在物件函式庫中勾選你打算自動化的 Excel 版本。
在 Form1 上放置一個 CommandButton 控制項。
將以下程式碼範例複製到 Form1 的程式碼視窗。
Option Explicit Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello" xlBook.Saved = True Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub在 執行 選單中,點擊 開始,或按 F5 啟動程式。
點擊 CommandButton 控制鍵。 沒有錯誤發生。 然而,已經建立了一個對 Excel 的參考,但尚未公開。
再點一次 CommandButton 控制鍵。 請注意,您會收到「症狀」區塊中討論的錯誤訊息之一。
注意:錯誤訊息出現是因為程式碼提及該小格的方法,卻未在呼叫前置
xlSheet 物件變數。停止專案並更改以下程式碼行:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"將程式碼行變更為類似以下程式碼行。
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"再跑一次程式。 請注意,你可以多次執行該程式碼而不會收到錯誤訊息。
參考資料
189618 當你執行使用 Automation 控制 (的 Visual Basic 程式碼時,可能會收到「執行時錯誤 '-2147023174' 800706ba) 」錯誤訊息,或「執行時錯誤 '462'」Word