當您在 Microsoft Visual Basic 中使用
New 運算子或
CreateObject 函式建立 Microsoft Office 應用程式執行個體時,可能會收到下面錯誤訊息:
執行階段錯誤 '429':ActiveX 元件無法建立物件
當 COM 無法建立要求的
Automation 物件,因此無法供 Visual Basic
使用時,就會發生這個錯誤。這個錯誤通常發生在某些特定電腦上,其他電腦很少發生此錯誤。
本文提供一些疑難排解秘訣,幫助您診斷並解決已知會造成這個錯誤的常見問題。
不像 Visual Basic 中的一些錯誤,造成錯誤 429
的原因不是單一的。應用程式或系統組態錯誤,或某個元件遺失或損壞了,都會造成此問題。找出確切原因的方法是排除其他的可能性。如果在用戶端電腦上遇到這個錯誤,您需要檢查許多事情,以找出並解決錯誤。
如果您使用的是 Office 應用程式,下面的項目會給您一些實用的建議,以疑難排解這個錯誤。這些資訊的其中一些可能也適用於非 Office COM
伺服程式,但本文假設您正試圖自動化 Microsoft Office。
檢查程式碼
要找出問題,首先請檢查程式碼。您必須知道錯誤是發生在哪裡,才可以進行疑難排解。請試著找出錯誤的那一行程式碼。
當您發現錯誤的程式碼時,請試著執行下列步驟:
- 確認程式碼使用明確的物件建立。如果將問題範圍縮小至單一動作,就比較容易找出問題。例如,不要這麼做:
Application.Documents.Add 'DON'T USE THIS!!
或:
Dim oWordApp As New Word.Application 'DON'T USE THIS!!
'... some other code
oWordApp.Documents.Add
這兩種方法都是使用隱含物件建立。除非至少呼叫一次變數,否則 Microsoft Word
不會啟動。因為程式的不同部位都有可能會呼叫該變數,這樣就很難找出問題所在。此外,到底是建立 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
這樣就比較容易找出問題,程式碼也比較易讀。 - 建立 Microsoft Office 應用程式的執行個體時,請使用 CreateObject,不要用 New。CreateObject 比較能密切對應至大部分 Visual C++ 用戶端所使用的建立程序,並且允許各版本間伺服程式的 CLSID 的差異。CreateObject 可以用於早期繫結與晚期繫結物件。
- 檢查傳送到 CreateObject 的 ProgID 字串是否正確,而且不區分版本 (亦即,請使用 Excel.Application,不要用
Excel.Application.8)。因為產生錯誤的系統所擁有的 Microsoft Office 版本有可能比您在 ProgID
中指定的版本更舊,或是更新。
- 如果要幫助無法在 IDE 中執行的應用程式進行偵錯,請使用 Erl 指令報告發生錯誤的那一行的行號。例如,下面程式碼可以告訴您哪一個 Automation 物件無法建立 (Word 或
Excel):
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
請混合使用訊息方塊與行號追蹤錯誤。 - 嘗試使用晚期繫結 (亦即,Dim oWordApp As
Object)。早期繫結的物件要求自訂介面以跨處理程序界限的方式進行封送處理。如果在 CreateObject 或 New 期間,封送處理自訂介面出現問題,您就會收到錯誤 429。晚期繫結的物件會使用系統定義的介面
(IDispatch),這種介面在封送處理時不需要自訂 Proxy。請嘗試使用晚期繫結的物件,看看是否會有不同。
如果只有在物件是早期繫結的物件時才會發生問題,表示這是和伺服程式有關的問題,通常經由重新安裝應用程式就可以解決問題 (見下文)。 - 如果您是從 ASP 或 MTS 元件執行自動化,請使用 CreateObject,而不要使用 Server.CreateObject()。使用 Server.CreateObject 會在 MTS 套件的識別下具現化 Office 應用程式,而 MTS 套件已知會造成 Microsoft Office
的問題。
檢查 Automation 伺服程式
造成
CreateObject 或
New 發生錯誤最常見的原因是伺服程式本身發生問題。一般來說,通常是應用程式的設定或安裝出了問題。下面是必須檢查的一些項目:
- 確認您要自動化的 Microsoft Office 應用程式安裝在本機電腦上,並確認您可以按一下 [開始] 然後從
[執行] 對話方塊啟動應用程式。如果無法手動啟動此程式,也就無法完成自動化。
- 請重新登錄應用程式,您可以按一下 [開始] 然後在 [執行] 對話方塊中輸入伺服程式的路徑,接著在路徑後面加上 /RegServer,然後按 [確定]。這樣應該會無聲的執行應用程式,然後將它重新登錄為 COM
伺服程式。如果問題是遺漏了登錄機碼,這樣做通常可以修正此問題。
- 請檢查您要自動化的應用程式的 CLSID 下的 LocalServer32
機碼。確認它是指向應用程式的正確位置,並確認路徑名稱是短路徑格式 (DOS
8.3)。雖然不一定要使用短路徑名稱登錄伺服程式,但目前已知含有空格的長路徑名稱在某些系統上會造成問題 (見下文)。
如果要檢查儲存的伺服程式路徑機碼,請按一下 [開始] 然後在 [執行] 對話方塊中輸入 regedit 以啟動
Windows 登錄編輯程式。瀏覽至 HKEY_CLASSES_ROOT\Clsid 機碼。在此機碼下,您會找到在系統上登錄的 Automation
伺服程式的 CLSID。稍後使用這個值找出代表您要自動化的 Office 應用程式的機碼,然後檢查其 LocalServer32 機碼,就可以查出路徑。
摺疊此表格展開此表格
| Office 伺服程式 | CLSID 機碼 |
|---|
| Access.Application | {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} |
| Excel.Application | {00024500-0000-0000-C000-000000000046} |
| FrontPage.Application | {04DF1015-7007-11D1-83BC-006097ABE675} |
| Outlook.Application | {0006F03A-0000-0000-C000-000000000046} |
| PowerPoint.Application | {91493441-5A91-11CF-8700-00AA0060263B} |
| Word.Application | {000209FF-0000-0000-C000-000000000046} |
路徑和檔案的確實位置是否相符?請注意,短路徑名稱會給您一個錯覺,認為路徑是正確的,而實際上卻可能不是。例如,Microsoft Office 與
Microsoft Internet Explorer (如果安裝在預設的位置) 會有類似 "C:\PROGRA~1\MICROS~X\" 這樣的短路徑,其中
X 是某個數字。如果您看到短路徑名稱,可能不會立即注意到這個問題。
您可以從登錄將這個值複製並貼到 [開始] 功能表的 [執行]
對話方塊中,以測試此路徑是否真的正確 (執行此應用程式前請移除 /Automation 參數)。當您按下 [確定] 時,應用程式是否有啟動?如果有,表示此伺服程式登錄正確。如果沒有,您就應該以正確路徑取代 LocalServer32 機碼的值
(如果可能,請使用短路徑名稱)。 - 目前已知當您自動化 Word 或 Excel 時,如果 Normal.dot 範本 (Word) 或
Excel.xlb 資源檔 (Excel) 損毀,就會發生問題。如果要測試是否有毀損的情形,請搜尋本機硬碟,找出所有 Normal.dot 或 *.xlb
的執行個體 (請注意,如果您使用的是有啟用設定檔的 Windows 2000、Windows NT 或 Windows
95/98,可能會找到這些檔案的多份副本,系統上每一個使用者設定檔都會有一份副本)。請暫時重新命名 Normal.dot 檔或 *.xlb 檔,然後重新執行
Automation 測試 (如果 Word 和 Excel
找不到這些檔案,就會建立這些檔案)。現在程式碼可以正確運作了嗎?如果是,請刪除您所重新命名的檔案,因為它們已經毀損了。如果不是,您應該將這些檔案重新命名回原來的名稱,這樣如果這些檔案中存有任何自訂設定值,才不會遺失。
- 如果您使用的是 Windows NT、Windows 2000、Windows XP 或 Windows Server
2003 系統,請在系統管理員帳戶下面執行應用程式。Office
伺服程式需要讀取/寫入登錄與磁碟,如果目前的安全性設定拒絕讓程式存取,可能會無法正確地載入。
檢查系統
系統組態也可能會造成跨處理序 COM 伺服程式的建立發生問題。下列是一些找到系統發生問題的地方的檢查事項:
- 是不是所有跨處理序伺服程式都會發生此問題?如果您的應用程式只使用特定 COM 伺服程式 (例如
Word),您需要測試其他跨處理序伺服程式,以確認問題不是出在 COM 層級本身。如果在此系統上無法建立任何跨處理序 COM 伺服程式,那麼就必須重新安裝
OLE 系統檔 (見下文) 或重新安裝作業系統,以解決此問題。
- 請檢查管理 Automation 的 OLE
系統檔的版本編號。這些檔案通常是一組一起安裝的,應該會符合組建編號。設定錯誤的安裝公用程式可能會誤將檔案分開安裝,造成它們變成不符合組建編號。為了避免
Automation 發生問題,您應該檢查這些檔案,確認檔案符合組建編號。
您可以在 Windows\System 或
Winnt\System32 目錄中找到 Automation 檔案。下面是需要檢查的檔案清單:
摺疊此表格展開此表格
| 檔案名稱 | 版本 | 修改的日期 |
|---|
| Asycfilt.dll | 2.40.4275 | March 08, 1999 |
| Oleaut32.dll | 2.40.4275 | March 08, 1999 |
| Olepro32.dll | 5.0.4275 | March 08, 1999 |
| Stdole2.tlb | 2.40.4275 | March 08, 1999 |
請在 [檔案總管] 中,用滑鼠右鍵按一下檔案,從快顯功能表中選取
[內容],以檢查檔案的版本。最重要的值是檔案版本的最後四個數字 (組建編號) 以及上次修改的日期。您必須確認所有 Automation
檔案的這些數值都相同。
請注意,上面所列的組建編號與日期只是舉例說明。您所看到的數值可能會不同。重要的是這些數值要彼此相符,而不是符合此表格所列的數值。
如果檔案不符合組建編號或修改的日期,您可以下載一個自我解壓縮工具,這個工具會更新您的 Automation 檔案。
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft
知識庫」中的文件:290887?
(http://support.microsoft.com/kb/290887/
)
VBRun60sp6.exe 會安裝 Visual Basic 6.0 SP6 Run-Time 檔
- 目前已知如果 Automation
伺服程式是位於一個名稱含有空格的資料夾中,和/或如果資料夾名稱和另一個資料夾很像,前面 8 個字元都相同,則 Windows NT 4.0 在啟動
Automation 伺服程式時會發生問題。例如,如果伺服程式是位於 C:\Program Files\SomeFolder 中,若系統上有另一個名為
C:\Program Stuff\SomeFolder 的資料夾,則呼叫 CreateObject
時,此伺服程式可能會無法啟動。如需詳細資訊,請參閱「Microsoft 知識庫」中的下列文件:有關此問題與解決步驟的詳細資訊,請按一下下列文件編號,檢視「Microsoft 知識庫」中的文件:
185126?
(http://support.microsoft.com/kb/185126/
)
BUG:COM/OLE Server Fails to Start on Windows NT 4.0
重新安裝 Microsoft Office
如果上述步驟都無法幫助您解決問題,請考慮解除安裝然後再重新安裝 Microsoft Office。Microsoft
建議您先解除安裝現有的版本,然後再從原始安裝磁碟片重新安裝。
如需要移除項目的完整清單,請參閱下面「Microsoft 知識庫」文件:
219423?
(http://support.microsoft.com/kb/219423/
)
OFF2000: 如何完全移除 Microsoft Office CD1
158658?
(http://support.microsoft.com/kb/158658/
)
OFF97:如何完全移除 Microsoft Office CD2
有關疑難排解 429
錯誤訊息的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
240377?
(http://support.microsoft.com/kb/240377/
)
HOWTO:How To Ensure Jet 3.5 Is Installed Correctly (Part I)
有關 Microsoft Office Automation 的最新資訊與程式碼範例,請參閱
Microsoft 線上支援網站,網址是: