こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

クエリ実行結果0件の場合のフォーム展開中止とメッセージ表示

Access初心者です。
テーブルのデータをクエリで抽出し、フォームで表示しようと考えています。
たとえば、
「テーブル1」に、「ID」「氏名」「部署」「趣味」のフィールドが、
「結果表示フォーム」にも対応するレコードソースを持つボックスがあり、
「条件指定フォーム」に「部署」という名のボックスと、「マクロ1」を割り当てた「ボタン1」がある場合に、
「テーブル1」を基にした「クエリ1」で、「部署」の抽出条件に「[条件指定フォーム]![部署]」と設定し、
「マクロ1」では、「クエリ1」をフィルタにして、「フォームを開く」コマンドで「結果表示フォーム」を開きたいと考えています。
この場合、
「条件指定フォーム」の「部署」ボックスにたとえば「総務部」と入力して「ボタン1」をクリックすると、「テーブル1」中に総務部の社員がいれば「結果表示フォーム」は問題なく展開しますが、「総務部」の社員がデータ中にないときには、すべてのテキストボックスが空欄のまま「結果表示フォーム」が展開してしまいます。
そこで、
「クエリ1」実行の際、結果のレコード数が0件の場合には、「結果表示フォーム」の展開を中止してメッセージボックスを表示するような修正を「マクロ1」に追加したいと思います。
どのような条件付けをすればよいでしょうか。
どなたかよいアドバイスをお願いいたします。

投稿日時 - 2008-04-23 12:51:55

QNo.3969668

すぐに回答ほしいです

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

マクロの条件で
Dcount("*","クエリ1")<>0 →フォームを開く
ではどうでしょう?

又は、
Dcount("*","クエリ1")=0 →メッセージボックス
...            →マクロの中止
             →フォームを開く

投稿日時 - 2008-04-23 13:57:24

お礼

o23さん、ありがとうございました。

おかけで、無事に思い通りの動きをさせることができました。
マクロのレベルでしたら自分でも理解ができましたので、アドバイスがとても役に立ちました。
簡単そうでなかなか自分では思いつかないものですね。
Dcountと「*」の組み合わせなど、なるほど、という感じでした。

投稿日時 - 2008-04-24 20:29:09

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

初心者にしては、滅茶苦茶に難しいことに挑戦されていますね。
私なんて生まれて初めて同じことをやってみました。

さて、ここでマクロを改良するのは至難です。
が、その程度のことは、オープンするフォームに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()でのキャンセル文は不要です。

投稿日時 - 2008-04-23 13:50:15

お礼

Husky2007さん、ありがとうございました。

(1)条件欄入力の有無のチェック
(2)該当レコード存在の有無のチェック
(3)条件指定によるフォーム展開
という3段階に分けての処理、なるほどと思いました。
このようにすればエラーになることはないですね。
とても参考になりました。
VBAにはなかなか手が回りませんが、ご教示いただいた点を参考にしつつ、勉強してみたいと思います。

投稿日時 - 2008-04-24 20:25:39

あなたにオススメの質問