摘要
當您在 Microsoft Visual Basic 中使用 New運算子或CreateObject 函數建立 Microsoft Office 應用程式實例時,您可能會收到下列錯誤訊息:
執行時間錯誤 '429':ActiveX 元件無法建立物件
當元件物件模型 (COM) 無法建立要求的 Automation 物件,且 Automation 物件因此無法使用 Visual Basic 時,就會發生此錯誤。 此錯誤不會發生在所有電腦上。
本文說明如何診斷及解決可能導致此錯誤的常見問題。其他相關資訊
在 Visual Basic 中,有幾種錯誤 429 的原因。 如果下列任一條件為 True,就會發生錯誤:
-
應用程式中有錯誤。
-
系統設定有誤。
-
有一個遺失的元件。
-
有損毀的元件。
若要找出錯誤的原因,請隔離問題。 如果您在用戶端電腦上收到「429」錯誤訊息,請使用下列資訊隔離並解決 Microsoft Office 應用程式中的錯誤。
注意 下列部分資訊可能也適用于非 Office COM 伺服器。 不過,本文假設您要將 Office 應用程式自動化。檢查驗證碼
在您疑難排解錯誤之前,請先嘗試隔離一行可能造成問題的程式碼。
如果您發現可能是單行程式碼造成問題,請完成下列程式:-
確認程式碼使用明確的物件建立。
如果問題縮小為單一動作,就更容易識別問題。 例如,尋找用來做為下列其中一項的隱含物件建立。 程式碼範例 1Application.Documents.Add 'DON'T USE THIS!!
程式碼範例 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
這兩個程式碼樣本都使用隱含的物件建立。 Microsoft Office Word 2003 要等到變數至少叫用一次後才會啟動。 因為變數可能會在程式的不同部分被叫用,因此可能很難找到問題。 建立 Application 物件或建立 Document 物件時,可能難以確認問題是否造成。
相反地,您可以進行明確的通話來個別建立每個物件,如下所示。Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.Add
當您明確要求個別建立每個物件時,問題會比較容易隔離。 這也可能會讓程式碼更容易閱讀。
-
當您建立 Office 應用程式實例時,請使用 CreateObject 函數,而非 新運算子。
CreateObject函數會非常貼近大多數Microsoft Visual C++用戶端使用的建立程式。 CreateObject函數也允許在不同版本之間變更伺服器的 CLSID。 您可以將CreateObject 函數與預先系結的物件及較晚系結的物件搭配使用。 -
確認傳送到
CreateObject的 「ProgID」 字串正確無誤,然後確認 「ProgID」 字串是獨立版本。 例如,使用「Excel.Application」 字串,而非使用 「Excel.Application.8」 字串。 如果系統失敗,可能是舊版 Microsoft Office 或較新版本的 Microsoft Office,而非您在「ProgID」字串中指定的版本。 -
使用 Erl 命令來回報無法成功之程式程式碼的行號。 這可能會協助您偵錯無法在 IDE 中執行的應用程式。 下列程式碼會告訴您無法 ( Microsoft Word 或 Microsoft Office Excel 2003) 建立自動化物件:
Dim oWord As Word.Application Dim oExcel As Excel.Application On Error Goto err_handler 1: Set oWord = CreateObject("Word.Application") 2: Set oExcel = CreateObject("Excel.Application") ' ... some other code err_handler: MsgBox "The code failed at line " & Erl, vbCritical
使用 MsgBox函數和行號來追蹤錯誤。
-
使用延遲系結的方式如下:
Dim oWordApp As Object
預先系結的物件需要跨程式邊界套用自訂介面。 如果在CreateObject期間或在 [ 新增] 期間無法使用自訂介面,您會收到「429」錯誤訊息。 綁定較晚的物件會使用 IDispatch 系統定義介面,而此介面不需要自訂 Proxy。 使用綁定較晚的物件來確認此程式正確運作。
如果問題只會在物件系結較早時發生,則會在伺服器應用程式中發生問題。 一般說來,您可以依照本文一節中所述的方式重新安裝應用程式,以修正問題。
檢查自動化伺服器
當您使用CreateObject 或 New時,發生錯誤最常見的原因是會影響伺服器應用程式的問題。 一般情況下,應用程式的設定或應用程式的設定會造成問題。 若要進行疑難排解,請使用下列方法:
-
確認您要自動化的 Office 應用程式已安裝在本機電腦上。 請確定您可以執行應用程式。 若要這樣做,請按一下 [開始],按一下 [
執行],然後嘗試執行應用程式。 如果您無法手動執行應用程式,應用程式將無法透過自動化運作。 -
重新註冊應用程式,如下所示:
-
按一下 [開始],然後按一下 [執行]。
-
在 [ 執行] 對話方塊中,輸入伺服器的路徑,然後在行尾附加 /RegServer 。
-
按一下 [確定]。
應用程式會以無訊息的方式執行。 應用程式會重新登錄為 COM 伺服器。
如果發生問題是因為登錄機碼遺失,這些步驟通常會修正問題。
-
-
針對您要自動化的應用程式,檢查 CLSID 底下的 LocalServer32 鍵。 請確定 LocalServer32 鍵指向應用程式的正確位置。 確認路徑名稱為簡短路徑 (DOS 8.3) 格式。 您不需要使用簡短的路徑名稱來註冊伺服器。 不過,包含內嵌空格的長路徑名稱可能會在某些系統上造成問題。
若要檢查伺服器所儲存的路徑金鑰,請啟動 Windows 登錄編輯程式,如下所示:-
按一下 [開始],然後按一下 [執行]。
-
輸入 regedit,然後按一下 [確定]。
-
移至HKEY_CLASSES_ROOT\CLSID鍵。
系統上已註冊自動化伺服器的 CLSID 位於此機碼底下。 -
使用下列 CLSID 機碼值來尋找代表您要自動化之 Office 應用程式的金鑰。 檢查路徑 CLSID 機碼的 LocalServer32 機碼。
Office 伺服器
CLSID 金鑰
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.Application
{00024500-0000-0000-C000-000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.Application
{000209FF-0000-0000-C000-000000000046}
-
檢查路徑,確認路徑與檔案的實際位置相符。
附註: 當路徑名稱不正確時,簡短路徑名稱看起來可能是正確的。 例如,Office 和 Microsoft Internet Explorer (如果安裝在其預設位置,) 具有類似 C:\PROGRA~1\MICROS~X\ 的簡短路徑, (
其中 X是數位) 。 此名稱一開始可能不是簡短的路徑名稱。 若要判斷路徑是否正確,請遵循下列步驟:-
按一下 [開始],然後按一下 [執行]。
-
從登錄複製值,然後在 [ 執行 ] 對話方塊中貼上值。
注意 在執行應用程式之前,請先移除 /automation 參數。 -
按一下 [確定]。
-
確認應用程式正確執行。
如果應用程式在您按一下 [ 確定] 之後執行,表示伺服器已正確登錄。 如果按一下 [確定] 之後應用程式無法執行,請以正確的路徑取代 LocalServer32 鍵的值。 如果可以,請使用簡短的路徑名稱。
-
-
測試 Normal.dot 範本或 Excel.xlb 資源檔案的可能損毀。 如果您在 Word 中的 Normal.dot 範本或 Excel 中的 Excel.xlb 資源檔案損毀,當您將 Microsoft Word 或 Microsoft Excel 自動化時,可能會發生問題。 若要測試這些檔案,請針對 Normal.dot 或 Excel.xlb 的所有實例搜尋本機硬碟。
注意 您可能會發現這些檔案有多個複本。 系統上所安裝的每一個使用者設定檔都有一份每個檔案的複本。 暫時重新命名 Normal.dot 檔案或 Excel.xlb 檔案,然後重新執行自動化測試。 如果 Word 和 Excel 都找不到這些檔案,請建立這些檔案。 確認驗證碼是否正常運作。 如果程式碼在建立新的 Normal.dot 檔案時運作,請刪除您重新命名的檔案。 這些檔案已損毀。 如果程式碼無法運作,您必須將這些檔案還原為原始檔案名,以儲存這些檔案中儲存的任何自訂設定。 -
在系統管理員帳戶底下執行應用程式。 Office 伺服器需要登錄和磁片磁碟機的讀/寫存取權。 如果您目前的安全性設定拒絕讀取/寫入存取,Office 伺服器可能無法正確載入。
檢查系統
系統設定也可能會導致建立程式外 COM 伺服器時發生問題。 若要進行疑難排解,請在發生錯誤的系統上使用下列方法:
-
判斷是否發生任何程式外伺服器的問題。 如果您的應用程式使用特定的 COM 伺服器 (例如 Word) ,請測試不同的程式外伺服器,以確保 COM 圖層本身沒有發生問題。 If you cannot create an out-of-process COM server on the computer, reinstall the OLE system files as described in the "Reinstalling Microsoft Office" section of this article, or reinstall the operating system to resolve the problem.
-
檢查管理自動化之 OLE 系統檔案的版本號碼。 這些檔案通常會以一組方式安裝。 這些檔案必須符合組建編號。 設定錯誤的安裝程式公用程式可能會誤安裝檔案。 這會導致檔案不相符。 若要避免自動化發生問題,請檢查檔案以確保符合檔案組建。
自動化檔案位於 Windows\System32 目錄中。 檢查下列檔案。檔案名稱
版本
修改日期
Asycfilt.dll
10.0.16299.15
2017 年 9 月 29 日
Ole32.dll
10.0.16299.371
2018 年 3 月 29 日
Oleaut32.dll
10.0.16299.431
2018 年 5 月 3 日
Olepro32.dll
10.0.16299.15
2017 年 9 月 29 日
Stdole2.tlb
3.0.5014
2017 年 9 月 29 日
-
使用 System Configuration 公用程式 (Msconfig.exe) 來檢查可能會限制 Office
應用程式中執行程式碼之協力廠商應用程式的服務和系統啟動注意:只在未連線到網路的測試系統上暫時停用防毒程式。 或者,在 Outlook 中遵循下列步驟來停用協力廠商增益集: 如果這個方法可以解決問題,請連絡協力廠商防毒軟體廠商,以取得有關防毒程式更新的詳細資訊。-
在 [ 檔案]功能表上,按一下 [ 選項],然後按一下 [ 增益集]。
-
按一下 [管理 COM 增益集],然後按一下 [ 執行]。
注意COM 增益集對話方塊隨即開啟。 -
清除任何協力廠商增益集的核取方塊,然後按一下 [ 確定]。
-
重新啟動 Outlook。
-
重新安裝 Office
如果上述程式都無法解決問題,請移除並重新安裝 Office。
如需詳細資訊,請參閱下列 Office 文章:
參考
如需 Office 自動化和程式碼範例的詳細資訊,請移至下列 Microsoft 網站: