プロが教える店舗&オフィスのセキュリティ対策術

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

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

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

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

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

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

何がよくないのでしょうか。
もしわかる方がいらっしゃったら教えてください。

A 回答 (3件)

御疲れ様です



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

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

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

参考になれば...
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2002/03/15 09:52

以前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
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2002/03/15 10:03

DAOの参照設定が、されていますでしょうか?



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

今、Access2000が手元にないので自信がありませんが、Recordsetは ADO でも使えるようですが、Database はDAO のオブジェクトかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

どうやらそのようですね。
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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!