【Excel VBA】コンパイルエラーの原因はこんなことだったのか…

プログラミング

アプリ作成で学ぶ 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は「リストボックス内のコラム数を指定する」プロパティです。テキストボックスにはないプロパティなので、コンパイルエラーが出ていたというわけです。

そもそも、プロパティで指定すればいいから、わざわざコードに起こさなくてもいいんですよね。
けれども、学習のためにと、教科書では書いてくださり、それをそのままなぞりました。

もふぃ
もふぃ

それが、私を挫折させる原因になろうとは…(笑)

こんな初歩的なことで、ほかに悩む人がいないように、この記事を残しました。

広告

もふぃ
もふぃ

参考になったよ!面白かったよ!というかたは、

購入しなくてもいいので、クリックだけでもしていただけると、ブログの励みになります!

【 初心者から財務プロまで 】エクセルで学ぶビジネス・シミュレーション講座 マスターコース

参考記事

ユーザーフォームのVBAエラー
いつもお世話になります。WINDOWS7 EXCELL2010 です。参照図のようにエラーが出ますがご指導いただけませんか。コンパイルエラー:名前が適切ではありません;UserFormer_Initilizeどんなが名前にすればいいか分か... - その他(Microsoft Office) 締切済 | 教えて!go...
Office TANAKA - VBAのコンパイルエラー[メソッドまたはデータ メンバが見つかりません。]

タイトルとURLをコピーしました