OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.235017
  • 閲覧数551
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 68% (11/16)

Access2000のVBAで初歩的な質問があります。

「tblShi」というテーブルがあります。
フォームにボタン「btn1」を作り、
デザインビューでボタンのプロパティを開いて
イベントのクリック時のところで、
「ビルダの選択」をコードビルダにしました。

そして「Private Sub btn1_Click()」の中に、最初に
  Dim db As Database
という記述をしています。

このフォームを開いてボタンを押すと、なぜか
  コンパイルエラー
  ユーザ定義型は定義されていません
というエラーが表示されてしまいます。

たしかにコードを書いているときに、
  Dim db As
のところまで入れると、小さいウィンドウの中に
たくさん候補が表されますが、
その中に「Database」というのがないです。
「QueryDef」とか「Workspace」とかもありませんでした。
(「Recordset」はありまして、それはコンパイルが通ります)

いろいろな解説を見ても、やはり最初はどれも
「Database」型を宣言しているようなんですが…

何がよくないのでしょうか。
もしわかる方がいらっしゃったら教えてください。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル10

ベストアンサー率 56% (59/104)

御疲れ様です

多分、参照設定がされていないだけだと思われます。
参照設定の方法は、VisualBasicEditorにて、
メニューバー→「ツール」→「参照設定」

参照するものは、「Microsoft DAO Library *.*」
または、「Microsoft ADOX *.*」
のどちらかを参照します。
(確認してないですが...)

使用する目的によってどちらを参照するか決めましょう。
また、宣言するときもきちんと宣言するのも心がけましょう。
[例]Dim DB As DAO.Database

参考になれば...
お礼コメント
love3factory

お礼率 68% (11/16)

ありがとうございます。

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

その他の回答 (全2件)

  • 回答No.2
レベル12

ベストアンサー率 63% (325/508)

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

モジュールウィンドウを開いて、ツール→参照設定で、
Microsoft DAO 3.6 Object Library がチェックされていないようでしたら、チェックしてみください。

今、Access2000が手元にないので自信がありませんが、Recordsetは ADO でも使えるようですが、Database はDAO のオブジェクトかと思います。
お礼コメント
love3factory

お礼率 68% (11/16)

ありがとうございます。

どうやらそのようですね。
Recordsetは両方にあるみたいです。
参照設定の優先順位の関係で、「Recordset」だけで宣言すると
DAOの方を見てくれてなかったりしました。

Dim db As Database
Dim rs As Recordset
Set db = CurrentDB
Set rs = db.OpenRecordset(ほにゃらら)

としたら、型がちがうとやらのエラーになりました。
最初の方がおっしゃったとおり、
「DAO.Database」「DAO.Recordset」と
記述するように心がけるべきみたいです。
投稿日時 - 2002-03-15 09:59:36
  • 回答No.3
レベル7

ベストアンサー率 46% (7/15)

以前DAOの解説に使った一例です。 ご希望に沿うかわかりませんが、よろしかったら・・・どうぞ! AccessVBAでTblの件数を取得すると↓ 1.Mainフォームにテキストボックスを1つ作って下さい。名前は「txt1」 2.デザインフォームのプロパティのイベントで「開く時」の右にある 「...」3点リーダーをクリックし、コードビルダを選択します。 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

お礼率 68% (11/16)

ありがとうございます。

VBAは初めてなので、手探り状態なのです。
とても参考になりました。
また困ったら質問するかもしれませんので、
よろしくお願いします。
投稿日時 - 2002-03-15 10:03:04
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ