Excel VBA の実行時エラー辞典
実行時エラー '429':コンポーネントはオブジェクトを作成できないか、このオブジェクトの参照を返せません
CreateObject などで使うアプリやコンポーネントが、その PC に登録されて使える状態か確認します。
よくある原因
- CreateObject に指定したクラス名("Outlook.Application" など)の綴りが違い、登録されたクラスとして見つかりません。
- 操作したいアプリやコンポーネントがその PC にインストールされていないか、登録の情報が古いか壊れています。
- コンポーネントが必要とする DLL が見つからないか、破損しています。
- ライセンスが必要なコンポーネントで、実行する PC でライセンスを確認できません。
- 相手のオブジェクトが使用中でロックされ、一時的にアクセスできません。
直し方
- 停止した CreateObject・GetObject の行で、指定したクラス名の綴りを確認します。
- そのアプリを手動で起動できるか確かめます。起動したときに登録の情報が直る場合があります。
- 手動で起動しても直らない場合は、そのアプリやコンポーネントのセットアップ(修復・再インストール)を PC の管理者に相談します。
- 自分の PC では動くのに別の PC で止まる場合は、その PC に同じアプリと必要なライセンスがあるか確認します。
- 一時的なロックが考えられる場合は、時間をおいて再実行します。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
Outlook を操作する準備の例です。修正前はクラス名の綴りが違います(Aplication)。修正後は綴りを直し、作成できない場合にメッセージを表示します。Outlook がない PC では、修正後もメッセージが表示されます。実行すると Outlook が起動する場合があります。
修正前
Dim app As Object
Set app = CreateObject("Outlook.Aplication")
修正後
Dim app As Object
On Error Resume Next
Set app = CreateObject("Outlook.Application")
If app Is Nothing Then
MsgBox "Outlook を起動できません:" & Err.Description
End If
On Error GoTo 0
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- CreateObject に渡すクラス名を Debug.Print で表示し、綴りや余分な空白がないか確認します。別の PC だけで止まる場合は、その PC で同じ行を確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? app Is Nothing, Err.Number
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '91':オブジェクト変数または With ブロック変数が設定されていません
- 実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません
- 実行時エラー '440':オートメーション エラーです