#334 「ユーザー定義型は定義されていません。」エラーの対処方法 VBA

「ユーザー定義型は定義されていません。」というコンパイルエラーが発生した場合の対処方法を例に、本Access Tipsに掲載されているVBAのコードを実行する際の注意事項、およびVBAでテーブルを扱う際の基礎知識について説明します。


VBAのコードを実行しようとしたとき、あるいはコンパイルしたときに下図のようなエラーメッセージが出た場合には、次のような手順でVBAの設定変更を行ってください。



  1. 適当なモジュール(あるいはフォームなど)を選んで、Visual Basic Editor(VBE)を開きます。


  2. メニューより[ツール]-[参照設定]を選択します。


  3. 「参照設定」ダイアログが開きます。


  4. 「参照可能なライブラリファイル」の一覧の中で、すでに「Microsoft ActiveX Data Objects 2.X Library」にチェックが付いていたら、このチェックを外します(Xはバージョン)。


  5. 「参照可能なライブラリファイル」の一覧をスクロールして「Microsoft DAO 3.X Object Library」を探し、これにチェックを付けます(Xはバージョン)。


  6. 最後に[OK]ボタンをクリックして、参照設定のダイアログを閉じます。

この設定をしたところで、再度プログラムを実行してみてください。正しく参照設定されていればエラーは解消されるはずです。
なお、再度参照設定のダイアログを開くと、下図のように、チェックマークが付けられたライブラリが先頭に表示されるようになります。



■解説
Accessでは、データが保存されている「テーブル」も、プログラムが記述されている「モジュール」も同じデータベースファイルの中にあります。しかし、VBAからテーブル(あるいはクエリ)にアクセスする場合、すべてがそのファイル内だけで処理されるわけではありません。またVBAという仕組みそのものがテーブルなどへのアクセス機能を持っているわけではありません。"外部のデータアクセス機能"を呼び出し、それを介してさまざまなレコード操作を行うようになっています。

その外部のデータアクセス機能とは次の2つです。
  • ADO(ActiveX Data Objects)
  • DAO(Data Access Obiect)

実際にプログラミングする際には、それぞれ異なる書き方・手法が必要となりますが、本Access Tipsに掲載されているプログラムは、特に断りのない限りすべて「DAO」を使ったものになっています。ADOしか使えない設定でDAOのプログラムを実行しようとすると、「ユーザー定義型は定義されていません。」というエラーが発生します。そのような場合には、そのプログラムで使用するデータアクセス機能を、ADOではなくDAOに切り替える必要があります。その切り替え操作を行うのが、上記手順で説明した「参照設定」の画面です。もちろん、DAOしか使えない設定になっている状態でADOを使う場合には、逆の設定変更を行わなければなりません。
  • Access2000/2002でデータベースを新規作成した場合には、デフォルトではADOだけを使う設定になっています
  • Access2000以降でも、データベースウィザードを使って作成したデータベースについてはDAOがデフォルトの設定になっています。
  • Access97など、以前のバージョンのAccessで作ったデータベースを変換した場合は、そのままDAOの設定が引き継がれています。
  • Access2003でデータベースを新規作成したときは、ADOとDAOどちらでも使うことができるようなデフォルト設定になっています。
    ※ただしこの場合、「Dim rst As DAO.Recordset」という書き方をしてDAOのRecordsetを明示的に記述したり、あるいは参照設定の「優先順位」を考慮しなければならないこともあります。基本的には、1つのデータベース内ではDAOかADOどちらか一方だけを使うようにした方がよいと思われます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved