
Access初心者です。
テーブルのデータをクエリで抽出し、フォームで表示しようと考えています。
たとえば、
「テーブル1」に、「ID」「氏名」「部署」「趣味」のフィールドが、
「結果表示フォーム」にも対応するレコードソースを持つボックスがあり、
「条件指定フォーム」に「部署」という名のボックスと、「マクロ1」を割り当てた「ボタン1」がある場合に、
「テーブル1」を基にした「クエリ1」で、「部署」の抽出条件に「[条件指定フォーム]![部署]」と設定し、
「マクロ1」では、「クエリ1」をフィルタにして、「フォームを開く」コマンドで「結果表示フォーム」を開きたいと考えています。
この場合、
「条件指定フォーム」の「部署」ボックスにたとえば「総務部」と入力して「ボタン1」をクリックすると、「テーブル1」中に総務部の社員がいれば「結果表示フォーム」は問題なく展開しますが、「総務部」の社員がデータ中にないときには、すべてのテキストボックスが空欄のまま「結果表示フォーム」が展開してしまいます。
そこで、
「クエリ1」実行の際、結果のレコード数が0件の場合には、「結果表示フォーム」の展開を中止してメッセージボックスを表示するような修正を「マクロ1」に追加したいと思います。
どのような条件付けをすればよいでしょうか。
どなたかよいアドバイスをお願いいたします。
No.2ベストアンサー
- 回答日時:
マクロの条件で
Dcount("*","クエリ1")<>0 →フォームを開く
ではどうでしょう?
又は、
Dcount("*","クエリ1")=0 →メッセージボックス
... →マクロの中止
→フォームを開く
o23さん、ありがとうございました。
おかけで、無事に思い通りの動きをさせることができました。
マクロのレベルでしたら自分でも理解ができましたので、アドバイスがとても役に立ちました。
簡単そうでなかなか自分では思いつかないものですね。
Dcountと「*」の組み合わせなど、なるほど、という感じでした。
No.1
- 回答日時:
初心者にしては、滅茶苦茶に難しいことに挑戦されていますね。
私なんて生まれて初めて同じことをやってみました。
さて、ここでマクロを改良するのは至難です。
が、その程度のことは、オープンするフォームに4行程度のVBAコードを書けば達成できます。
Private Sub Form_Open(Cancel As Integer)
Cancel = CBool(Me.RecordsetClone.RecordCount = 0)
If Cancel Then
MsgBox "該当するレコードがありませんのでフォームオープンをキャンセルします!"
End If
End Sub
なお、一般的にはこの手法も稀だと思いますよ。
Private Sub コマンド4_Click()
On Error Resume Next
Dim intCount As Integer
Dim lngBango As Long
If Len(Me.伝票番号 & "") > 0 Then
lngBango = Me.伝票番号
intCount = DCount("*", "売上伝票", "伝票番号=" & lngBango)
If intCount > 0 Then
DoCmd.OpenForm "売上伝票", , , "伝票番号=" & lngBango
Else
MsgBox "該当するレコードがありませんのでフォームオープンをキャンセルします!"
End If
End If
End Sub
このように、先ず、条件指定フォームの条件欄が入力されているかをチェックするでしょう。
If Len(Me.部署 & "") > 0 Then
次に該当するレコードが存在するか否かをチェックするでしょう。
intCount = DCount("*", "XXXX", "部署='" & Me.部署 & "'")
If intCount > 0 Then
該当するレコードが存在すると
DoCmd.OpenForm "XXXX", , , 部署='" & Me.部署 & "'"
で、条件を指定してフォームをオープンします。
もちろん、この場合には、Form_Open()でのキャンセル文は不要です。
Husky2007さん、ありがとうございました。
(1)条件欄入力の有無のチェック
(2)該当レコード存在の有無のチェック
(3)条件指定によるフォーム展開
という3段階に分けての処理、なるほどと思いました。
このようにすればエラーになることはないですね。
とても参考になりました。
VBAにはなかなか手が回りませんが、ご教示いただいた点を参考にしつつ、勉強してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Access クエリの結果が0件だった場合、エラーを表示させる方法
Access(アクセス)
-
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
ACCESSのクエリー抽出条件にIIFを使用して
Access(アクセス)
-
5
レコード件数が0件なら印刷をしない。
Access(アクセス)
-
6
VBAをつかってクエリの情報を抽出するには??
Visual Basic(VBA)
-
7
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
8
Access サブフォームでの選択行の取得
その他(データベース)
-
9
Accessのクエリーのゼロデータ行の非表示の仕方
Excel(エクセル)
-
10
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
11
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
12
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
13
アクセスVBAのMe!と[ ]
Access(アクセス)
-
14
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
15
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
16
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
17
accessで該当するレコードがない場合
その他(プログラミング・Web制作)
-
18
access テキストボックスの値取得
Access(アクセス)
-
19
access マクロでのフィルタの解除の方法
Access(アクセス)
-
20
フィルタ後のフォームの件数の取得の仕方
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AccessでIDを入力したら他の項...
-
ACCESSでVBAから選択クエリの抽...
-
サブフォームを利用したクエリ...
-
accessでオートナンバーを使わ...
-
Access サブフォームでの選択行...
-
動画編集アプリvllo抽出エラー
-
エクセルで、抽出したデータだ...
-
PDFファイル/抽出許可され...
-
MSAccess ロック状態かどうかを...
-
帳票フォームでのあるコンボボ...
-
エクセル関数で住所から丁目番...
-
Excel 文字列から6桁の数値の抽出
-
ACCESS フォームで入力データ...
-
X-Ripperというフリーウェアに...
-
Accessでフォームに自動入力し...
-
別MDBのフォームを起動
-
入力した値をコンボボックスに...
-
Access2000、これはいったい・...
-
「パラメータが少なすぎます。3...
-
フォームのテキストボックス→ク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
クエリ実行結果0件の場合のフ...
-
ACCESS フォームで抽出したデー...
-
Accessでフィルタの実行アクシ...
-
ACCESSで、EXCELのような、sumi...
-
フォームからクエリの抽出期間...
-
アクセスのフォームに連番を表...
-
ACCESS2003のグループ化のエラ...
-
ACCESS2007 マクロ クエリのパ...
-
ACCESSのレポートにフォームの...
-
Access2016埋め込みマクロでの...
-
ACCESSで、フォームで抽出した...
-
サブフォームを利用したクエリ...
-
AccessのフォームをExcelに出力
-
access クエリでIIF文で抽出条...
-
Accessクエリの抽出条件にフォ...
-
ACCESS クエリのデザインビュ...
-
クエリーの結果をフォームに表...
-
アクセス2007 フォームでフィ...
おすすめ情報