Excel VBA の実行時エラー辞典
実行時エラー '440':オートメーション エラーです
Excel から操作した別のアプリやオブジェクトが返したエラーです。Err の内容から、どの操作が失敗したかを確認します。
よくある原因
- CreateObject などで操作している Word・Outlook などのメソッドを実行中に、相手のアプリ側でエラーが起きています。
- 相手のオブジェクトのプロパティを読み書きしたときに、相手のアプリがその値や状態を受け付けていません。
- 使おうとしている Office アドインが、システム管理者によって無効にされています。
直し方
- エラーが出た行で、どのアプリのどのメソッド・プロパティを使ったかを確認します。
- Err.Number・Err.Source・Err.Description を記録し、Source が示すアプリの資料で原因を調べます。
- 失敗する行の直前に On Error Resume Next を置き、直後で Err.Number を調べて、失敗した操作を一つずつ特定します。確認が終わったら On Error GoTo 0 で元に戻します。
- アドインを使う処理なら、組織の管理者にそのアドインが有効か確認します。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
Word を起動し、保存済みのブックと同じフォルダーの template.docx を開く例です。失敗したときに相手のアプリが返した内容を記録します。表示される番号は、アプリや操作によって 440 以外の場合もあります。修正前のコードで止まると、Word が画面に表示されないまま残ることがあるため、タスク マネージャーで確認してください。
修正前
Dim app As Object
Set app = CreateObject("Word.Application")
app.Documents.Open ThisWorkbook.Path & "\template.docx"
修正後
Dim app As Object
Set app = CreateObject("Word.Application")
On Error Resume Next
app.Documents.Open ThisWorkbook.Path & "\template.docx"
If Err.Number <> 0 Then
Debug.Print Err.Number, Err.Source, Err.Description
End If
On Error GoTo 0
app.Quit
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 相手のアプリを操作する行ごとにブレークポイントを置き、F8 でどの行で止まるかを確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? Err.Number, Err.Source, Err.Description
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '429':コンポーネントはオブジェクトを作成できないか、このオブジェクトの参照を返せません
- 実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません
- 実行時エラー '1004':アプリケーション定義またはオブジェクト定義のエラーです