• ベストアンサー

Access2000のVBAでコンパイルエラー

Access2000のVBAで初歩的な質問があります。 「tblShi」というテーブルがあります。 フォームにボタン「btn1」を作り、 デザインビューでボタンのプロパティを開いて イベントのクリック時のところで、 「ビルダの選択」をコードビルダにしました。 そして「Private Sub btn1_Click()」の中に、最初に   Dim db As Database という記述をしています。 このフォームを開いてボタンを押すと、なぜか   コンパイルエラー   ユーザ定義型は定義されていません というエラーが表示されてしまいます。 たしかにコードを書いているときに、   Dim db As のところまで入れると、小さいウィンドウの中に たくさん候補が表されますが、 その中に「Database」というのがないです。 「QueryDef」とか「Workspace」とかもありませんでした。 (「Recordset」はありまして、それはコンパイルが通ります) いろいろな解説を見ても、やはり最初はどれも 「Database」型を宣言しているようなんですが… 何がよくないのでしょうか。 もしわかる方がいらっしゃったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

御疲れ様です 多分、参照設定がされていないだけだと思われます。 参照設定の方法は、VisualBasicEditorにて、 メニューバー→「ツール」→「参照設定」 参照するものは、「Microsoft DAO Library *.*」 または、「Microsoft ADOX *.*」 のどちらかを参照します。 (確認してないですが...) 使用する目的によってどちらを参照するか決めましょう。 また、宣言するときもきちんと宣言するのも心がけましょう。 [例]Dim DB As DAO.Database 参考になれば...

love3factory
質問者

お礼

ありがとうございます。 まったくその通りでした。 DAOのライブラリのようなものを読込んでいないのが 原因だろうというのは想像ついていたんですが、 設定がこんなところにあったんですね。 VBAもVBも経験がなかったので、知りませんでした。 ソースの中で何か宣言するのかな?と思ってました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • pooh_200x
  • ベストアンサー率46% (7/15)
回答No.3

以前DAOの解説に使った一例です。 ご希望に沿うかわかりませんが、よろしかったら・・・どうぞ! AccessVBAでTblの件数を取得すると↓ 1.Mainフォームにテキストボックスを1つ作って下さい。名前は「txt1」 2.デザインフォームのプロパティのイベントで「開く時」の右にある 「...」3点リーダーをクリックし、コードビルダを選択します。 3.コードビルダが開いたら ツール→参照設定→Microsoft DAO 3.6 Object Libraryにチェックを付けて下さい。 下記の点線の部分を↓にカット&ペースト Private Sub Form_Open(Cancel As Integer) ●●●←ここにカット&ペースト End Sub '---------------------------↓ Dim db1 As Database '変数宣言 Dim rs1 As Recordset Dim aCnt As Integer '総件数の取得 aCnt = 0 Set db1 = CurrentDb Set rs1 = db1.OpenRecordset("T_全件") If rs1.EOF Then '1件も存在しない場合はエラー Msgbox("T_全件テーブルに該当データは存在しません。") Exit Sub End If rs1.MoveLast aCnt = rs1.RecordCount Me.txt1.Value = aCnt  'テーブルの合計値をTxt1に表示する。 rs1.Close db1.Close

love3factory
質問者

お礼

ありがとうございます。 VBAは初めてなので、手探り状態なのです。 とても参考になりました。 また困ったら質問するかもしれませんので、 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • yoisho
  • ベストアンサー率64% (331/516)
回答No.2

DAOの参照設定が、されていますでしょうか? モジュールウィンドウを開いて、ツール→参照設定で、 Microsoft DAO 3.6 Object Library がチェックされていないようでしたら、チェックしてみください。 今、Access2000が手元にないので自信がありませんが、Recordsetは ADO でも使えるようですが、Database はDAO のオブジェクトかと思います。

love3factory
質問者

お礼

ありがとうございます。 どうやらそのようですね。 Recordsetは両方にあるみたいです。 参照設定の優先順位の関係で、「Recordset」だけで宣言すると DAOの方を見てくれてなかったりしました。 Dim db As Database Dim rs As Recordset Set db = CurrentDB Set rs = db.OpenRecordset(ほにゃらら) としたら、型がちがうとやらのエラーになりました。 最初の方がおっしゃったとおり、 「DAO.Database」「DAO.Recordset」と 記述するように心がけるべきみたいです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Access2002 VB がエラー

    Access2002 VBで以下のコーディングをしてます Dim db As Database Dim rs As Recordset Dim fld As Field Set db = CurrentDb Set rs = db.OpenRecordset("ConvertChar") これを実行するとdb宣言行で以下のエラーが表示されます。 コンパイルエラー: ユーザ定義型は定義されていません。 これは何が原因でエラーとなるのでしょうか? 宜しくお願いします。

  • アクセスVBAです

    Sub test() Dim DB As Database Dim T As TableDef Dim myTable As String myTable = "Table1" Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs If T.Name = myTable Then DoCmd.DeleteObject acTable, myTable Exit For End If Next DB.Close Set DB = Nothing End Sub これを実行しようとすると Dim DB As Database の部分で コンパイルエラー プロジェクトではなく、ユーザ定義型を指定してください。 と言うエラーになります。 Dim DB As Objectにすればエラーにならずに進みますが 何が原因なのでしょうか?

  • ACCESSの宣言

    Private Sub コード_AfterUpdate() Dim Mdb As Database Dim Mtb As Recordset Dim sqlstr As String って、始めに宣言しますが、いざプログラムを走らせてみると、Dim Mdb As Database で "コンパイルエラー ユーザー定義型は定義されていません" になってしまいます。ここでひっかかるともうどうにもできないです。 なぜ、この宣言はいけないのでしょうか?

  • アクセス97のVBAが2000で使えません。

    ACCESS97で問題なく動いていたVBAなのですが、ACCESS2000では「ユーザー定義型は定義されていません。」というエラーとなって動きません。 ソースで言うと、 Dim DB As Database というような変数宣言の部分でいきなり出てきます。 Database型がユーザー定義型と認識されているようですが、何故こうなってしまうのでしょう? またどのようにすればこの問題を解消できるでしょうか? また97と2000でのコーディング上の変更点などは、どこで調べるのが分り易いでしょうか?

  • Visual Basic 6.0 でデータベースが作成できない。

    超初心者です。 XP Home Edition へ Visual Basic 6.0 Professional Editon と SP6 をインストールしました。 標準exe 画面から Dim Ws as Workspace Dim Db as Database として実行するとコンパイルエラーになります。 Dim Ws as まで入力すると補助ボックスが開きますが、その中の項目に workspace,database いずれもありません。 初期設定の問題でしょうか。

  • ACCESS2000でテーブルをVBAからテーブルを読み込む方法

    ACCESS2000を使っています。 以下の指定をした場合、「ユーザ定義型は定義されていません」のメッセージが出て、コンパイルが通りません。 なにかインストールや設定が必要なのでしょうか? Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル名", dbopendynaset) ヘルプ等を自分なりに参照してみたのですが、わかりません。教えてください。

  • ACCESS2000でコンパイルエラーが表示されてしまいます

    ACCESS初心者です。宜しくお願いします。 前任者が作成したACCESS2.0で使用していたものを、ACCESS2000でコンパイルすると、 コンパイルエラー ユーザ定義型は定義されていません。と表示されてしまいます。 Sub ページ設定P() Dim DB As Database, T As Table, X As Integer, I As Integer, 図面番号 As Integer Set DB = CurrentDb() Set T = DB.OpenTable("図面リスト印刷TEMP") ' テーブルを開きます。 X = DCount("印刷", "図面リスト印刷TEMP", "[印刷]=No") If X > 27 Then X = X - 27 + 43 X = X Mod 42 X = X For I = 1 To X T.MoveLast T.Delete Next I Else X = X - 27 + 43 X = X For I = 1 To X T.MoveLast T.Delete Next I End If End Sub どのようにすれば動くのでしょうか? 以上、宜しくお願い致します。

  • DATABASE型について

    ACCESSプロジェクトを使っています。  (基本的な理解不足だと思いますが) Access97では、 Dim DB As Database Dim RS As Recordset と宣言して Set DB =CurrentDb() Set RS=DB.OpenRecordset(… で使えていましたが、Accessプロジェクトでは使えません。 (ストアドプロシージャ部分ではなく、フォームのVBA部分で) フォーム上のボタンから、モジュール操作を実行したいのですが、 上記 そのまま使用すると 「コンパイルエラー ユーザー定義型は定義されていません」 と出てきます。 Accessプロジェクトで操作するにはどのようにすればいいのでしょうか?

  • ACCESS2007でのDAO(?)につきまして

    お世話になっております。 ACCESSの件で色々教えて頂き、とても感謝しております。 つきましては、ACCESS2007で疑問に思える点がありましたので 以下に記述いたします。 あるACCESS2007のVBAの記述で Dim myDB As Database Dim myQueryDef As QueryDef なる変数定義がされているのを見たのですが 質問があります <質問1> 上記の定義はDAOを使用しているという事になるのでしょうか? <質問2> DAOであるならば Dim myDB As DAO.Database Dim myQueryDef As DAO.QueryDef と記述するのが正しいのではないでしょうか? (Option Explicitは記述してあります) 私には謝った記述に見えるのですが、動作 している理由がわかりません。 質問が変かもしれませんが、どなたか教えて 頂けるありがたいです。

  • 早速やってみましたが、エラーが出てきてできません。

    早速やってみましたが、エラーが出てきてできません。  「ユーザー定義型が定義されていません。」と Dim DB As Database ここでとまってしまいます。 Help見たのですが、「オブジェクト ライブラリまたはタイプ ライブラリで定義する」とありました。 設定してみようとしたのですが、どれが必要なのかさっぱりわかりません。

このQ&Aのポイント
  • 仕事や環境が合わず過敏性腸症候群になってしまいました。体が動かず行けないことに罪悪感や不安を感じ、さまざまな症状が現れています。
  • 職場は比較的恵まれた環境であり、自分の体調管理が必要な職種です。薬を使っても改善が見られず、退職の相談を人事にしました。
  • 退職日まで休まず頑張りたいが、辛さから耐えられる自信がありません。また、自分の精神状態に不安障害が当てはまるか心療内科やカウンセラーに相談したいと考えています。
回答を見る