このメッセージは、RaiseメソッドまたはErrorステートメントによって生成されたエラーが、Visual Basic for Applicationsで定義されたエラーに該当しない場合に表示されます。これは、Microsoft ExcelやVisual Basicなどのホストアプリケーションによって定義されたエラーの場合もあります。エラーが発生したコンテキストを確認し、再生成するエラーを特定する必要があります。バグの原因を理解するためにErrオブジェクトのSourceプロパティを確認し、エラー処理にはOn Error Resume Nextを使用することが推奨されます。詳細はヘルプで確認できます。
Visual Basic for Applications(VBA)におけるエラー管理
Visual Basic for Applications(VBA)を使用する際、エラーハンドリングは重要な要素です。特に、RaiseメソッドやErrorステートメントを使用して生成されたエラーが、Visual Basic for Applicationsによって定義されたエラーと一致しない場合、このメッセージが表示されます。この文書では、エラーの原因とその解決策について詳しく解説します。
エラーの原因
-
未定義のエラー番号の使用
アプリケーションがErr.Raise nまたはError nステートメントを実行したが、番号nがVBAで定義されていない場合に発生します。この場合、エラーの性質をユーザーに理解させるためには、Err.Raiseを使用して追加の引数を指定する必要があります。例えば、説明文、ソース、ヘルプ情報を含めることができます。エラーを再生成する場合、Err.Clearを実行する前にトラップしたエラーを再生成することもできますが、Err.Clearを最初に実行すると、再生成のために追加の引数をRaiseメソッドに記入する必要があります。 -
他のアプリケーションからのオブジェクトへのアクセスによるエラー
他のアプリケーションのオブジェクトにアクセスしている際に、VBAエラーにマッピングできないエラーが戻された可能性があります。
これに対処するには、アクセスしたオブジェクトのドキュメントを確認し、ErrオブジェクトのSourceプロパティに生成したエラーのプログラムIDが含まれているか確認しましょう。また、オブジェクトにアクセスするコードでは、On Error Resume Next構文を使用することをお勧めします。
ホストアプリケーションに対する捕捉可能なエラーのリスト
かつてプログラマーは、すべての捕捉可能なエラーメッセージの文字列を印刷するためにループを使用していました。このようなコードは、以下のようになります。
vb
For index = 1 To 500
Debug.Print Error$(index)
Next index
このコードはVBAのすべてのエラーメッセージをリストアップしますが、Visual Basicに関連するフォームやコントロールに関するホスト定義のエラーは「アプリケーション定義またはオブジェクト定義のエラー」と表示されます。これらの多くは捕捉可能な実行時エラーです。
特定のホストアプリケーションに特有の捕捉可能なエラーリストを見つけるには、HelpのSearchダイアログボックスを使用し、最初のテキストボックスに「Trappable」と入力して、Show Topicsをクリックします。その後、リストボックスの下部で「Trappable Errors」を選択し、Go Toをクリックします。
サポートとフィードバック
Office VBAやこのドキュメントに関する質問やフィードバックがありますか?サポートやフィードバックの方法については、Office VBA support and feedbackをご覧ください。
VBAのエラーハンドリングを理解することは、より堅牢なアプリケーションを作成するための重要なステップです。エラーの根本原因を正確に把握し、それに基づいて適切な対策を講じることが成功への道となります。
————-
Application-defined or object-defined error | Microsoft Learn
Source link
The message you’re seeing arises when an error generated via the Raise method or Error statement doesn’t match any errors defined by Visual Basic for Applications (VBA). This can happen for errors you’ve defined yourself or errors originating from host applications like Microsoft Excel or Visual Basic. For instance, form-related errors from Visual Basic can’t be recreated by simply giving a number to the Raise method or Error statement.
Causes and Solutions:
-
Undefined Error Number: If an error number specified in Err.Raise or Error is not recognized by VBA, ensure you provide additional details like a description, source, and help information. If you wish to re-raise a previously caught error, do so without calling Err.Clear first; otherwise, you need to provide all arguments for Raise.
-
Propagation from Other Applications: Errors from other applications may return an error that cannot be mapped to a VBA error, indicated in the Err object’s Source property.
Recommendations:
- Use
On Error Resume Nextfor handling errors from external objects instead ofOn Error GoTo. - To find all trappable errors, refer to the Help documentation or use the Debug.Print method, but remember that host-related errors will be reported as “Application-defined or object-defined error.”
For further assistance, consult Office VBA support resources or the documentation for feedback and guidance.