アプリ作成で学ぶ Excel VBAプログラミング ユーザーフォーム&コントロール 2019/2016対応で学習中、『コンパイルエラー メソッドまたはデータメンバーが見つかりません』が出ました。
当時はどうしてもエラーが解決せず、テキストを進めていくのを諦めてしまいました。
しかし、1年近く経ち再度トライすると、すんなりとうまくいきました。
当時、原因が分かりませんでしたけど、改めて検証すると、なぜコンパイルエラーが出たのか判明いたしました。
原因は、毎度のことながら些細なことでした。
しかし、そんな些細なことでも挫折してしまう人がいますので、私と同じミスをしても、私のように挫折しないに、記事に残します。
コンパイルエラー出現状況

アプリ作成で学ぶ Excel VBAプログラミング ユーザーフォーム&コントロール 2019/2016対応で学習中、 UserForm_Initialize() イベントで、コンパイルエラーが出ました。
もちろん、従順な下僕のようにテキストをすすめております。
コンパイルエラーがでたときの該当コードはこちらとなります。
Private Sub UserForm_Initialize()
'初期化設定
Worksheets("顧客マスタ").Activate
'リストボックスの設定
With lstCustomer
.Font.Size = 10
.ColumnCount = 7
.ColumnWidths = "20;120;90;50;130;70;70"
.TextAlign = fmTextAlignLeft
End With
End Sub
ちなみに、コンパイルエラーが表示される箇所は、UserForm_Initializeイベントの.ColumnCountです。
仮説1: コードが間違えている
まずは、上述のコードが間違えている可能性を疑います。
ColumnをColumとかよくある間違いですよね。
しかし、何回も確認しましたが、一致しています。
サンプルコードと作成コードもDifffで確認しましたが、間違いはありませんでした。
仮説2: そもそもテキストが間違えている

コードがあってるんだから、テキストが間違えているのではないか!
めっちゃめちゃ正誤表、疑いましたww
まだ正誤表に出てないのかぐらいに思っていました(笑)
実際には、テキストに間違いはありませんでした。

疑ってごめんなさい
仮説3: 機種、Officeのバージョン違い
書籍は、Office2019最新版ですが、まず試したのがMac版Excelでした。
Mac版Excelはいろいろと問題がありそうなので、それが原因だったのかなと。
そして、Windowsの入っているパソコン取り出して再度取り組みましたが、そのパソコンに入っていたのは、Office2010でした。
そうしたバージョン違い、機種によるエラーの可能性も疑いました。

コードがあってる。書籍もあってるんだったら、そんなところですよね!?
しかし、実はOffice2019で試してもエラーは解決しませんでした。
仮説4: UserForm Initialize()
実は、 Private Sub UserForm_Initialize() のイベントは、ほかのユーザーフォームでも使用しておりました。
”Private” なので影響はないはずなのですが、検索していると、二つあるのはおかしいといった解答もあり、 Private Sub UserForm_Initialize2() としてみました。
すると…

なんと、エラーが出ません!パスしたのか!?

これが原因だったのかなぁ…?
モヤモヤするなぁ〜
と思っていましたが、違いました!
根本的な原因はこれではありませんでした!
コンパイルエラーとなった本当の原因

見た目は、「 テキストボックス 」なのですが、使用しなくてはいけないのは「 リストボックス 」でした!


しかしながら私は、テキストボックスを使用していたことが判明しました!!
テキストボックスも、リストボックスも見た目は一緒です!
コードのコメントにも”リストボックスの設定”と書いてます。

ここで指定している、.ColumnCountは「リストボックス内のコラム数を指定する」プロパティです。テキストボックスにはないプロパティなので、コンパイルエラーが出ていたというわけです。
そもそも、プロパティで指定すればいいから、わざわざコードに起こさなくてもいいんですよね。
けれども、学習のためにと、教科書では書いてくださり、それをそのままなぞりました。

それが、私を挫折させる原因になろうとは…(笑)
こんな初歩的なことで、ほかに悩む人がいないように、この記事を残しました。
広告

こちらの記事もよろしくお願いします!
参考記事
