上図は、myDataTypeというユーザー定義型を定義しています。メンバは長整数型(Long)のAだけです。プロシージャの中で、変数bufをmyDataType型で宣言しました。次の行で、変数bufのメンバBに値を代入しようとしたのでエラーです。myDataType型には、Bというメンバが存在しないからです。当たり前っちゃ、当たり前です。
このエラーは、ヘルプによると次のように解説されています。
指定したコレクション、オブジェクト、またはユーザー定義型 には、参照するメンバ.が含まれていません。エラーの原因と対処方法を次に示します。
- オブジェクトまたはメンバの名前が間違っています。
指定した名前のスペルを確認してください。また、Type ステートメントまたは指定したオブジェクトのドキュメントを参照して、メンバが適切かどうか、あるいはスペルが間違っていないかどうかを確認してください。
- コレクションのインデックスに範囲外の値が指定されています。
Count プロパティを使用して、指定したインデックスを持つメンバが存在するかどうかを確認してください。コレクションのインデックスの最小値は、0 ではなく 1 であるため、Count プロパティの値はインデックスに指定できる最大値と同じになります。
Typeステートメントを使ったユーザー定義型に関しては、確かに書かれている通りですが、ヘルプを読むと、ほかの一般的なコレクションやオブジェクトでも発生しそうな感じです。少し試してみましょう。
【コレクションの名前を間違えてみた】
【メンバの名前を間違えてみた】
【コレクションのインデックスに範囲外の値を指定してみた】
【オブジェクトにないメソッドを指定してみた】
どれもありがちなミスですが「メソッドまたはデータ メンバが見つかりません」ではないエラーが発生しました。
どちらかというと、このエラーはUserFormでお目にかかる機会が多いです。たとえば、TextBox1が存在しないUserFormのコマンドボタン(CommandButton1)に、次のようなコードを書くと発生します。
MeはUserFormを指します。UserForm上にTextBox1というメンバが存在しないというエラーです。これを、Meを省略して書くと、別のエラーになります。
冒頭のTextBox1が、Me(UserForm)のメンバとして見つからないので「つーことは、ひょっとして、これって変数?」と気遣ってくれたのですが、変数としても定義されていないので「変数としても定義されてないよ」というエラーです。あるいは、下図のように誤ったプロパティを指定したときも、このエラーが起こります。
UserForm上にLabel1は存在するのですが、Label1にはTextプロパティがありません。Labelに表示される文字列はCaptionプロパティです。もちろん、誤ったプロパティだけでなく、誤ったメソッドでも同じです。LabelオブジェクトにDeleteメソッドはありません。