• ベストアンサー

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

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

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

  • ベストアンサー
  • o23
  • ベストアンサー率36% (64/175)
回答No.2

マクロの条件で Dcount("*","クエリ1")<>0 →フォームを開く ではどうでしょう? 又は、 Dcount("*","クエリ1")=0 →メッセージボックス ...            →マクロの中止              →フォームを開く

taka_0120
質問者

お礼

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

その他の回答 (1)

noname#140971
noname#140971
回答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()でのキャンセル文は不要です。

taka_0120
質問者

お礼

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