
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
参考になれば...
ありがとうございます。
まったくその通りでした。
DAOのライブラリのようなものを読込んでいないのが
原因だろうというのは想像ついていたんですが、
設定がこんなところにあったんですね。
VBAもVBも経験がなかったので、知りませんでした。
ソースの中で何か宣言するのかな?と思ってました。
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
ありがとうございます。
VBAは初めてなので、手探り状態なのです。
とても参考になりました。
また困ったら質問するかもしれませんので、
よろしくお願いします。
No.2
- 回答日時:
DAOの参照設定が、されていますでしょうか?
モジュールウィンドウを開いて、ツール→参照設定で、
Microsoft DAO 3.6 Object Library がチェックされていないようでしたら、チェックしてみください。
今、Access2000が手元にないので自信がありませんが、Recordsetは ADO でも使えるようですが、Database はDAO のオブジェクトかと思います。
ありがとうございます。
どうやらそのようですね。
Recordsetは両方にあるみたいです。
参照設定の優先順位の関係で、「Recordset」だけで宣言すると
DAOの方を見てくれてなかったりしました。
Dim db As Database
Dim rs As Recordset
Set db = CurrentDB
Set rs = db.OpenRecordset(ほにゃらら)
としたら、型がちがうとやらのエラーになりました。
最初の方がおっしゃったとおり、
「DAO.Database」「DAO.Recordset」と
記述するように心がけるべきみたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) VBAのコードで Dim Obj As AccessObject でコンパイルエラーがでます。 「ユ 2 2022/07/01 06:57
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[ACCESS/VBA]動的にSQL文を...
-
AndroidからのAccessデータベー...
-
データベースへ携帯でアクセス
-
顧客管理ソフトとCTIについて
-
Namazuで検索できるシステムに...
-
freeDBTagger以外で、MP3のアル...
-
「 教えて!goo」 について
-
エクセルのフォームについて(...
-
COBOLでACSESSをS...
-
データベースに接続したままの...
-
エクセルでカタログ制作(印刷...
-
LVMでHDDが壊れた時の対応
-
町名データベース
-
有料DBソフトと無料DBソフトの違い
-
フェイスブックのようなSNSを作...
-
Access2000からネットワーク経...
-
ACCESS2019でのエラーメッセージ
-
データベースとウェブ(WWW)の共...
-
C#でint型をIntPtr型に変換した...
-
Thunderbirdのインポートの処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DAO フィルターをかけたい エ...
-
Access2000のVBAでコンパイルエ...
-
希望の位置へフィールドを追加...
-
ACCESS2000でテーブルをVBAから...
-
エクセルからアクセスにADO...
-
列名が無効です
-
FindFirst複数条件
-
データベースの変換
-
accessのvbaでの実行時エラーに...
-
パススルークエリの使い方について
-
三枝夕夏って?
-
sqlite3の動作が?xamppでは問...
-
型 varchar から型 numeric へ...
-
キャッシュとバッファの違いは?
-
エクセルのフォームについて(...
-
AndroidからのAccessデータベー...
-
データベースの最適化をマクロ...
-
クエリをキャンセルしたいので...
-
データベースの2GBって・・・?
-
listener.logが肥大化
おすすめ情報