【VBA】ユーザー定義型は定義されていません。(コンパイルエラー)の原因
今回はこの画像のエラーの原因と解決方法を紹介します。
「ユーザー定義型は定義されていません。」が発生するのは、タイプミスが原因のことが大半です。
エラーの理由と確認すべきポイントをお見せするので、1つずつ確認してみてください。
エラーの解消方法
Sub Sample1()
Dim i As Integar 'Integerをタイプミスしている
End Sub
例えば、このようなコードを実行(もしくはコンパイル)するとエラーが発生します。
エラーが発生している原因は変数の型をタイプミスしているためです。
詳細は後述しますが、このエラーは存在しない型で変数宣言したときに発生します。
エラーの原因は大きく次の2つのため、エラーが発生している行(おそらく変数宣言している行のはず)を調べましょう。
エラーの原因①: タイプミス
先ほどのサンプルコードのように変数の型をタイプミスしていないか確認してみましょう。おそらく、タイプミス
していることがほとんどだと思います。
エラーの原因②: ライブラリの参照設定を忘れている
Sub Sample2()
Dim dic As Scripting.Dictionary 'Microsoft Scripting Runtimeの参照設定がないとエラー
End Sub
もう1つの原因はライブラリの参照設定を忘れていることです。
特にネット上からコピーしたコードを使ったときは、参照設定が漏れているかもしれません。
参照設定していない型の変数宣言をしたときにもこのエラーが発生します。
ライブラリの参照設定を追加すればエラーが解消します。
参照設定の追加方法は下記記事をご覧ください。
ユーザー定義型は定義されていません。の理由(意味)
最後にこのエラーメッセージの意味を説明します。
タイプミスなのに、どうしてユーザー定義型と言ってくるのか疑問に思う人もいるかと思います。
そもそも「ユーザー定義型」とは何か、といった話なのですが、VBAにおいても自作の型を定義することができます。(詳しく知りたい型はVBA クラスなどで検索してみてください)
例えばタイプミスしてIntegarと書くと、VBAはタイプミスとは考えず、Integarという名前の自作の型がないかと認識します。
そのため、「ユーザー定義型は定義されていません。」というエラーメッセージを表示する、というわけです。
変数の型を自作できる(ユーザー定義)のだなと覚えておいてください。