當你自動化 Office 應用程式時,會收到執行時錯誤 429

套用到
Office 2016 Office 2013

摘要

當您使用 Microsoft Visual Basic 中的 New 運算子或 CreateObject 函式來建立 Microsoft Office 應用程式的實例時,可能會收到以下錯誤訊息:

注意

執行時錯誤 '429':ActiveX 元件無法建立物件

當 COM (元件物件模型無法建立所請求的自動化物件時,) 就會出現此錯誤,因此該自動化物件因此無法被 Visual Basic 使用。 此錯誤並非所有電腦都會發生。

本文說明如何診斷及解決可能導致此錯誤的常見問題。

更多資訊

在 Visual Basic 中,錯誤 429 有幾個原因。 若以下任一條件成立,則會發生錯誤:

  • 申請表有錯誤。
  • 系統設定出了錯。
  • 缺少一個元件。
  • 有一個零件受損。

要找出錯誤原因,先找出問題所在。 如果您在用戶端電腦上收到「429」錯誤訊息,請利用以下資訊在 Microsoft Office 應用程式中隔離並解決該錯誤。

以下部分資訊也可能適用於非 Office COM 伺服器。 不過,本文假設你想自動化 Office 應用程式。

檢查程式碼

在排除錯誤之前,試著找出可能造成問題的一行程式碼。

如果你發現可能有一行程式碼造成問題,請完成以下步驟:

  • 確保程式碼使用明確的物件建立。

    如果問題能集中在單一行動中,會更容易被發現。 例如,尋找隱含物件建立,這些工具會被用作以下其中一種。

    程式碼範例 1

    Application.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 必須至少呼叫該變數一次後才會啟動。 由於變數可能在程式的不同部分被呼叫,問題可能較難被定位。 在建立 應用程式 物件或 建立文件 物件時,可能很難驗證問題是否真的引起。

    相反地,你可以明確呼叫分別建立每個物件,如下。

    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 函式而非 New 運算子。

    CreateObject 函式緊貼大多數 Microsoft Visual C++ 用戶端所使用的建立過程。 CreateObject 函式也允許在不同版本間更改伺服器的 CLSID。 你可以用 CreateObject 函式來處理早期綁定的物件,也可以用來處理晚期綁定的物件。

  • 確認傳遞給 “ProgID” 字串的
    CreateObject 是正確的,然後驗證「ProgID」字串是否與版本無關。 例如,使用「Excel.Application」字串代替「Excel.Application.8」字串。 失敗的系統可能使用的是較舊版本的 Microsoft Office,或是比你在「ProgID」字串中指定的版本更新的 Microsoft Office。

  • 使用 Erl 指令回報未成功的程式碼行號。 這可能幫助你除錯無法在 IDE 中執行的應用程式。 以下程式碼告訴你哪些自動化物件無法 (Microsoft Word或 Office Excel 2003) 建立Microsoft:

    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
    

    早期綁定物件需要其自訂介面跨越流程邊界進行管理。 若自訂介面無法在 CreateObjectNew 中執行,則會收到「429」錯誤訊息。 延遲綁定物件使用 IDispatch 系統定義介面,不需要自訂代理節點來管理。 使用晚界物件來驗證此程序是否正確運作。

    如果問題只在物件提前綁定時發生,則問題出在伺服器應用程式。 通常,您可以依照本文「檢視自動化伺服器」章節的說明重新安裝應用程式來修正問題。

檢查自動化伺服器

使用 CreateObjectNew 時最常見的錯誤原因是影響伺服器應用程式的問題。 通常,問題是由應用程式的設定或設定造成的。 要排除故障,請使用以下方法:

  • 確認你想自動化的 Office 應用程式是否已安裝在本地電腦上。 確保你能執行這個應用程式。 要做到這點,請點擊 開始,再點擊
    執行,然後嘗試執行該應用程式。 如果你無法手動執行應用程式,應用程式就無法透過自動化運作。

  • 重新註冊申請方式如下:

    1. 按一下 [開始],然後按一下 [執行]

    2. 執行 對話框中,輸入伺服器的路徑,然後在該行末尾加上 /RegServer

    3. 按一下 [確定]

      應用程式靜默執行。 應用程式會重新註冊為 COM 伺服器。

    如果問題發生在登錄檔金鑰遺失,這些步驟通常能修正問題。

  • 檢查你想自動化應用程式的 CLSID 底下 LocalServer32 金鑰。 請確保 LocalServer32 鍵指向應用程式的正確位置。 確保路徑名稱是短路徑 (DOS 8.3) 格式。 你不必透過短路徑名稱註冊伺服器。 然而,包含嵌入式空間的長路徑名稱在某些系統上可能會造成問題。

    要檢查伺服器所儲存的路徑金鑰,請啟動 Windows 登錄檔編輯器,如下:

    1. 按一下 [開始],然後按一下 [執行]

    2. 鍵入 regedit,然後按一下 [確定]

    3. 移到 HKEY_CLASSES_ROOT\CLSID 鍵。

      系統上註冊自動化伺服器的 CLSID 屬於此鑰匙。

    4. 請使用以下 CLSID 鍵值來找出代表您想自動化的 Office 應用程式的鍵。 檢查 CLSID 金鑰的 LocalServer32 金鑰作為路徑。

      辦公伺服器 CLSID 鍵
      存取。應用程式 {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
      Excel.Application {00024500-0000-0000-C000-000000000046}
      Outlook.Application {0006F03A-0000-0000-C000-00000000046}
      PowerPoint.應用 {91493441-5A91-11CF-8700-00AA0060263B}
      Word。應用 {000209FF-0000-0000-C000-00000000046}
    5. 檢查路徑是否與檔案實際位置相符。

    短路徑名稱看似正確,實際上並不正確。 例如,Office 和 Microsoft Internet Explorer (如果安裝在預設位置,) 有一條類似 C:\PROGRA~1\MICROS~X\ 的短路徑,其中 (
    X 是一個數字) 。 這個名字乍看之下可能不像是短途名稱。

    要判斷路徑是否正確,請依照以下步驟操作:

    1. 按一下 [開始],然後按一下 [執行]

    2. 從登錄檔複製該值,然後貼上到 執行 對話框。

      在執行應用程式之前,先移除 /automation 開關。

    3. 按一下 [確定]

    4. 確認應用程式是否正確執行。

      如果你按下 確定後應用程式還是會執行,代表伺服器註冊正確。 如果按下 確定後應用程式無法執行,請將 LocalServer32 鍵的值替換為正確的路徑。 如果可以,使用簡短的路徑名稱。

  • 測試 Normal.dot 範本或 Excel.xlb 資源檔案是否有損壞。 當你自動化 Microsoft Word 或 Microsoft Excel 時,如果 Word 中的 Normal.dot 範本或 Excel 中的 Excel.xlb 資源檔損壞,可能會發生問題。 要測試這些檔案,請在本地硬碟搜尋所有 Normal.dot 或 Excel.xlb 的實例。

    你可能會找到這些檔案的多份副本。 系統上安裝的每個使用者設定檔,每個檔案都有一份副本。

    暫時將 Normal.dot 檔案或 Excel.xlb 檔案重新命名,然後重新執行自動化測試。 如果找不到檔案,Word 和 Excel 都會建立這些檔案。 確認程式碼是否有效。 如果在建立新的 Normal.dot 檔案時程式碼正常,請刪除你重新命名的檔案。 這些檔案已經損壞。 如果程式碼無法運作,你必須將這些檔案還原回原始檔名,才能保存這些檔案中儲存的自訂設定。

  • 在管理員帳號下執行應用程式。 Office 伺服器需要對登錄檔和磁碟機進行讀寫權限。 如果你目前的安全設定拒絕讀寫存取,辦公伺服器可能無法正確載入。

檢視系統

系統設定也可能對建立未完成流程的 COM 伺服器造成問題。 為了排除故障,請對發生錯誤的系統使用以下方法:

  • 判斷問題是否發生在任何未完成程序的伺服器上。 如果你的應用程式使用特定的 COM 伺服器 (,例如 Word) ,請測試另一台未完成流程的伺服器,以確保問題不發生在 COM 層本身。 若無法在電腦上建立未完成的 COM 伺服器,請依本文「重裝 Microsoft Office」章節重新安裝 OLE 系統檔案,或重新安裝作業系統以解決問題。

  • 檢查管理自動化的 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 日

    要查看檔案版本,請在 Windows 檔案總管中右鍵點擊該檔案,然後點選 屬性。 請注意檔案版本的最後四位數字 () 號及最後修改日期。 確保所有自動化檔案的數值都一樣。

    以下檔案為 Windows 10 版本 1709,建構版本 16299.431。 這些數字和日期僅為範例。 你的價值觀可能不同。

  • 使用系統設定工具 (Msconfig.exe) 檢查第三方應用程式的服務與系統啟動,這些應用程式可能限制 Office 應用程式中執行程式碼

    只在未連接網路的測試系統上暫時停用防毒程式。

    或者,請依照 Outlook 中的以下步驟來停用第三方外掛:

    若此方法解決問題,請聯絡第三方防毒軟體供應商,了解更多關於防毒軟體更新的資訊。

    1. 檔案 選單中,點選 「選項」,然後點選 「附加元件」。

    2. 點選 「管理 COM 外掛」,然後點擊 「開始」。

      COM 外掛 對話框會打開。

    3. 勾選任何第三方外掛的勾選框,然後點 選確定

    4. 重新啟動 Outlook。

重新安裝 Office

如果之前的程序都沒解決,請移除後再重新安裝 Office。

欲了解更多資訊,請參閱以下《辦公室》文章:

在 PC 或 Mac 上下載並安裝或重新安裝 Office 365 或 Office 2016

參考資料

欲了解更多關於 Office 自動化及程式碼範例的資訊,請造訪以下 Microsoft 官網:

開始使用 Office 開發