エラーメッセージ
ExcelマクロやVBAを使用している際に、次のようなポップアップが表示されることがあります。
Run-time error '429':
ActiveX component can't create object
このエラーは通常、コードがCOMオブジェクトや外部アプリケーション(Outlook、Word、FileSystemObjectなど)のインスタンスを作成しようとした際に、Windowsオペレーティングシステムがそのコンポーネントを見つけられない、またはインスタンス化できない場合に発生します。
主な原因
エラー 429 がコードの入力ミスによって発生することは稀で、ほとんどの場合はVBAとWindowsレジストリ間の設定の問題です。主な原因は以下の通りです。
- 必要なDLLまたはOCXファイルがWindowsに登録されていない。
- VBAの参照設定リストに不足しているライブラリがある。
- 32ビット版と64ビット版Officeのバージョンの不一致。
- Officeのインストールまたは特定のActiveXコンポーネントの破損。
- コードを実行しているマシンに対象のアプリケーション(Outlookなど)がインストールされていない。
ステップ 1: 失敗している行を特定する
まず、エラーが表示されたらデバッグをクリックしてください。VBAが失敗の原因となっている行をハイライトします。通常、以下のような行のいずれかです。
' シナリオ A: 遅延バインディング
Set objFSO = CreateObject("Scripting.FileSystemObject")
' シナリオ B: 参照設定(事前バインディング)
Set objOutlook = New Outlook.Application
CreateObjectでエラーが発生する場合、Windowsはレジストリ内のプログラムID(ProgID)を見つけることができていません。Newで発生する場合は、ライブラリの参照設定に問題があります。
ステップ 2: コンポーネントを手動で登録する
Scripting.FileSystemObjectのような標準コンポーネントやカスタムDLLを使用している場合、基となるファイルを再登録する必要があるかもしれません。これは、ソフトウェアが最近更新された、または移動された環境での一般的な修正方法です。
- コマンドプロンプトを管理者として開きます。
- 64ビット版Windowsで一般的な32ビットコンポーネントを使用する場合は、次のコマンドを入力します。
regsvr32.exe C:\Windows\SysWOW64\scrrun.dll
64ビットコンポーネント、または32ビットシステムの場合:
regsvr32.exe C:\Windows\System32\scrrun.dll
注: scrrun.dll を、使用しようとしている特定のDLL(DAOの場合は dao360.dll など)に置き換えてください。
ステップ 3: VBAの参照設定を確認する
「参照設定(事前バインディング)」(Dim app as Outlook.Applicationのように特定の型を宣言する方法)を使用している場合、VBAにはライブラリファイル(.tlb、.olb、または.dll)への有効な参照が必要です。
- VBAエディタで、ツール > 参照設定に移動します。
- **参照不可: [ライブラリ名]**と表示されている項目を探します。
- 参照不可の項目がある場合は、チェックを外します。
- 下にスクロールして、現在システムにインストールされているそのライブラリの正しいバージョンを見つけ、チェックを入れます。
- OKをクリックし、再度コードを実行してみてください。
ステップ 4: 32ビットと64ビットの競合に対処する
これは、古いバージョンのOfficeから64ビット版のOffice 365に移行する開発者にとって頻繁に発生する悩みです。一部のActiveXコンポーネント(Common Controlsの mscomctl.ocx など)は、32ビット版のExcelでしか動作しません。
コードが32ビットのActiveXコントロールに依存している場合、64ビット版のExcel環境ではエラー 429 が発生します。この場合、2つの選択肢があります。
- Officeを32ビット版にダウングレードする(レガシーな企業向けアプリに推奨)。
- 64ビット互換の代替手段を使用するようにコードを更新する(例:
Win64API宣言や組み込みのUserFormコントロールの使用)。
ステップ 5: /regserver を使用してOfficeを修復する
Excel自体が他のOfficeアプリ(WordやOutlookなど)との通信に苦労している場合、フル再インストールを行わずにExcelにレジストリキーを強制的に再書き込みさせることができます。
- すべてのOfficeアプリケーションを閉じます。
Win + Rを押して「ファイル名を指定して実行」ダイアログを開きます。- 次のように入力してEnterキーを押します。
excel.exe /regserver
Excelが登録をリセットする間、画面が一瞬ちらつくことがあります。これにより、ExcelとWord/Outlook間の自動化エラーが解消されることがよくあります。
検証手順
修正を確認するには、新しいモジュールを作成してこのテストスクリプトを実行してください。これは、エラー 429 の最も一般的な原因である FileSystemObject の作成を試みます。
Sub TestActiveXFix()
On Error GoTo ErrorHandler
Dim fso As Object
' オブジェクトの作成を試行
Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox "Success! ActiveX component created successfully.", vbInformation
Set fso = Nothing
Exit Sub
ErrorHandler:
MsgBox "Fix failed. Error " & Err.Number & ": " & Err.Description, vbCritical
End Sub
このスクリプトが実行され「Success」メッセージが表示されれば、コアスクリプティングライブラリのシステムActiveX登録は機能しています。
プロのヒント
- 配布には遅延バインディングを使用する: Excelファイルを他のユーザーと共有する場合は、参照設定を追加する代わりに
CreateObject("Library.Class")を使用してください。これにより、ソフトウェアのバージョンが異なるマシンでの「参照不可」エラーを回避できます。 - アクセス権限を確認する: エラー 429 は、ユーザーが特定のDLLファイルまたはレジストリキーへのアクセス権限を持っていないために発生することがあります。ユーザーが
C:\Windows\System32に対して標準的なユーザー権限を持っていることを確認してください。 - ウイルス対策ソフトによるブロック: 一部の強力なウイルス対策設定では、スクリプティングオブジェクト(特に
WScript.ShellやFileSystemObject)の作成がブロックされることがあります。エラーが解消されない場合は、セキュリティログを確認してください。

