エラー内容
VBAコンパイル時に、「ユーザー定義型は定義されていません。」と表示される。
原因と解決方法
3つの原因と、その解決方法が考えられます。
原因1.型指定のスペルが間違っている
解説
変数宣言する時に、型指定のスペルが間違っているのが原因です。
1 2 3 4 5 6 7 |
Sub ErrSample20_01() Dim lngGoukei As lng 'long型がlngとなっている End Sub |
解決方法
型のスペルミスを修正します。
1 2 3 4 5 6 7 |
Sub ErrSample20_02() Dim lngGoukei As Long End Sub |
こういうミスは時間の無駄なので、できるだけCtl + Spaceで入力候補一覧から
選択して入力しましょう!
原因2. ライブラリの参照設定が足りていない
解説
ライブラリの参照設定が足りていないのが原因です。
ライブラリには、特定の目的ごとに必要な型や定数、関数などが定義されています。
よく使うライブラリとしては、
- Microsoft Scripting Runtime:ファイルやフォルダ操作する
- Microsoft Outlook 16.0 Object Library:Outlookを操作する
などがあります。
このライブラリを参照設定することで、ライブラリにある機能を使うことができるようになります。
ライブラリ名や、その機能はおぼえなくてOKです。
必要な時にその都度しらべれば大丈夫です。
サンプルソースでは、必要なライブラリを参照設定していないとエラーとなります。
1 2 3 4 5 6 7 8 |
Sub ErrSample20_03() Dim objFSO As FileSystemObject '←変数定義でエラーとなる Set objFSO = New FileSystemObject End Sub |
解決方法
エラーが発生している場所を確認し、何のライブラリが必要かネットなどで調べます。
その後、必要なライブラリを参照設定で追加します。
参照設定の方法
1.[ツール]→[参照設定]と選択します。
2.参照設定一覧から、必要なライブラリにチェックを入れ、OKをクリックします。
今回のサンプルソースでは、型FileSystemObjectがエラーとなっています。
なので、ファイルやフォルダ操作するライブラリ「Microsoft Scripting Runtime」を参照設定します。
原因3. 他のモジュールに定義がある
解説
型の定義が他のモジュールにあり、Privateで宣言されているのが原因です。
Privateで宣言されていると、そのモジュール内でしか使えません。
解決方法
Private宣言をPublic宣言に修正します。
Public宣言にすることで、他のプログラムに影響がないかは要確認です!