• ベストアンサー
  • すぐに回答を!

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

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数4572
  • ありがとう数3

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

その他の回答 (1)

  • 回答No.1
noname#140971
noname#140971

初心者にしては、滅茶苦茶に難しいことに挑戦されていますね。 私なんて生まれて初めて同じことをやってみました。 さて、ここでマクロを改良するのは至難です。 が、その程度のことは、オープンするフォームに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

  • 帳票から単票フォームへの表示がうまくいきません

    ACCESSを始めたばかりです。 帳票表示されているレコードを単票フォームで表示させたいです。 テーブル「売上データ」がありこのテーブルを使って帳票用と単票用のクエリを作成、それぞれに対してフォームを作っています。 「売上データ」には、オートナンバーで No があり、これを主キーにしてあります。 クエリ Q帳票   フォーム F帳票 クエリ Q単票   フォーム F単票 フォームF帳票には、レコード内にボタンをおきました。 ボタンには、下記のマクロをつくって イベント クリック時 のところにいれました。 マクロ フォームを開く  フォーム名 :F単票  ビュー   :フォームビュー  フィルタ名 :  Where条件式 :[No]=[Forms]![F帳票]![No]  データモード:  ウィンドウモード:ダイアログ フォームF帳票 で、検索窓を作って検索した一覧の中から単票表示したいレコードのボタンをクリックして単票フォームをダイアログで開かせたいです。 上記のようにやってみたのですが、単票フォームは開くもののデータは空白になってしまいます。 ちなみに、作ったマクロを実行してみると Forms!F帳票!No とパラメータの入力を求められるので適当な数字をいれるとその数字に該当した単票フォームが開きます。 WEBで探して同じような感じで作ってみたのですがうまくいきません。 どこが間違っているのでしょうか? ちなみにクエリ Q単票 の Noの抽出条件に[Forms]![F帳票]![No]をいれてみたりもしましたがうまくいきませんでした(空白で単票が開く) 何卒よろしくお願いします。

  • ACCESS2000フォームでコンボボックスを使ったクエリーを作成したい

    ACCESS2000でデータベースを作成しています。 どなたか教えてください!! 検索フォームというのを作り、そこには「部」「課」「掛」を 選択できるようにテーブルを参照してコンボボックスを作成しました。 それぞれの項目を選択した後、「検索」ボタンを押すと コンボボックスから選んだ値と一致するレコードだけを抽出して表示させたいんです。 クエリは何となく作ったのですが、現在は全てのデータが抽出されてしまいます。 条件を一切入力していない状態なんです。 検索条件に"総務部"などと入力すればそのデータだけ抽出 されるようにはなっています。 でも、でも・・・「コンボボックスで選んで値と一致したら」抽出っていう条件をどうやって設定していいかわからないのです。 どうぞよろしくお願いします。

  • 50個分のクエリとフォームを作らないといけないのか!?

    50個分のクエリとフォームを作らないといけないのか!? 素人が見よう見まねで作っていますので、分かり難いかと思いますが、 何卒よろしくお願い致します。 現在、フォーム(検索)があり、そこに非連結コンボボックス(テキスト1)が あります。このコンボボックスは、テーブル(取引先)の値(会社名)を参照して います。会社名は約200あります。 テーブル(取引先)のフィールドは会社名、フリガナ、五十音別です。 今迄は、マウス操作で会社名を選んでいました。今度、タッチパネルLCDを 使う事になったのですが、コンボボックスでは、文字は大きく出来ても、 コンボボックスの枠やスクロールバーの幅を大きく出来ず、うまくタッチ パネルでの操作ができません。 そこで、新たにフォーム(五十音)を作り、五十音分(あ~ん)のコマンドボタン を作り、コマンドボタン”あ”を押すとクエリ”あ”で、テーブル(取引先)の 五十音別が”あ”の会社だけ抽出させ、結果をフォーム(あ)に表形式で表示 させました。 さらに、マクロ(値の代入)で、フォーム(検索)のコンボボックス改めテキスト ボックス(テキスト1)に会社名を代入させました。 回りくどい事だと思いますが、これで、マウスで選ぶのと同じ事が出来ました。 しかし、この方法だと、クエリとクエリの結果を表示させるフォームが、それ ぞれ50づつ必要になってしまいます。 50づつ作ってもいいのですが、きっと他にもっと簡単で明解な方法があると 思うのですが、素人ゆえ、全く見当がつきません。 簡単な方法がありましたら、ご教授のほど宜しくお願い致します。 なお、わがままを言って申し訳ありませんが、コンボボックスの枠を大きくした りではなく、コマンドボタンを使う方法でお願い致します。

  • フォームからクエリの抽出条件を入力する方法

    既存のデータベースより複数のテーブルを結合し、必要なカラムだけを表示させるようなクエリを作成しました。 他の人でも操作ができるように、フォームを作成し、テキストボックスにて抽出条件を指定し、クエリやレポートを出力するような形にしたいと思っています。 このクエリの抽出条件をフォームより指定する方法で悩んでいます。 現在、作成したクエリの抽出条件の中に [Forms]![フォーム名]![テキストボックス名] と入力し、フォームのテキストボックスで抽出条件を記入してクエリを実行させているのですが、これでは複雑な条件 (Between~ や 条件1 or 条件2 等の指定) を入れると「直前の操作はキャンセルされました」とポップアップが出てしまい、思うとおりにうごきません。 フォーム内でこのような抽出条件範囲の指定ができるようにするにはどうしたらよろしいでしょうか? よろしくおねがいします。

  • ACCESS2000でクエリで抽出したレコードをフォームに表示するには

    A顧客テーブルで作成したフォームからコマンドボタン(電話番号検索)押下時に 電話番号入力画面が出て入力した電話番号とマッチした顧客レコードをフォームに 表示させたいのですが上手く出来ません。 現在進めている方法では何がダメなんでしょうか(以下は考え方) A顧客テーブルから作成したフォムに電話番号コマンドを作成してコマンドを 押すとクエリの実行をさせる。クエリはA顧客テーブルのフィールドを全て選択して抽出条件に[電話番号入力]としている。 (結果) ・フォームを開くと先に電話番号入力が出てくる、先にフォームが開かない。 ・電話番号検索コマンドボタンを押すと抽出条件に合ったレコードはデーターシートビューに表示される。 よろしくお願いします

  • Access フォーム上でクエリによるcsv出力

    Accessで障害履歴を管理するDBを作っています ・障害内容をフォームより起票して障害履歴テーブルに保存される ・月に一度、前月分の障害をクエリでcsvに抽出 ・抽出する際に発生日時のフィールドを[Like "2021/04/**"]の 抽出条件を入れて指定した月をクエリで抽出しています。 今回悩んでいるところは、毎回クエリのデザインビューを開き 発生日時の抽出条件に[Like "2021/04/**"]を入れて抽出ではなく フォーム上で2021年○月と指定して抽出というボタンを実行すると 自動でcsv出力まで出来るのを目指しています。 ※csv出力する際に指定したファイル名が自動でつけばなお良い イメージとしてはフォーム内にエクスポートというボタンを作り、 それを押すと障害発生日時の○年○月を指定するポップアップが表示され、日付指定して実行すると○月分の障害履歴が指定したファイル名でcsvにエクスポートされる。 またはフォーム内に障害発生日時の○年○月を指定するテキストボックスがあり、日付指定後にエクスポートのボタンを押すと同様にcsv出力されるのを作りたいのですが可能でしょうか?

  • アクセスのフォームでデータ元をテーブルからクエリにかえたい

    上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。 アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。 そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作ります。このクエリを元にして、同じフォームでデータ入力したいのです。入力項目は全く同じです。「福岡県」をもっているレコードだけが全く同じフォームで表示されるようにしたいのです。 もとのテーブル名を「全データ」とし、クエリを「福岡県抽出クエリ」と呼ぶとすると、どこかで「全データ」を「福岡県抽出クエリ」に書き換えればすべてのテキストボックスのデータ元が入れ替わってくれると思うのですが、それでいいのでしょうか。その場合、どうやったらいいのでしょう。 なぜ一からファームを作り直さないかというと、テキストボックスの大きさや配置を決めるのに膨大な労力を費やしていて、全部をやり直したくないからです。 どうかお願いします。ご指導ください。

  • テキストボックスにクエリ結果を表示させたい

    フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。 クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。 テーブルは フィールド1|フィールド2   A   |  10   B   |  20   C   |  30   D   |  40 のような簡単なものです。 テキストボックスBのコントロールソースに 「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。 どのようにやればよいのでしょうか?

  • フォームに表示したいんですが・・・

    複数の人数の作業時間を入力するフォームを作成しました。 誤って入力したものをフォーム上で訂正したいので非連結のテキストボックスを 2つ作成しクエリーの「作業日」と「社員番号」のフィールドの抽出条件をforms![フォーム名]![テキストボックス名]としました。 フォームの2つのテキストボックスに「日付」と「社員番号」を入力すると1レコードが表示されました。 間違いを探すのに1日1日入力するのは手間なので、例えばAさんの1年分の レコードから1月1日から1月31までの31レコードをフォームに表示させるにはどうすればよいのでしょうか? いろいろやってみたんですがうまく出来ませんでした。 うまく説明できませんがよろしくお願いいたします。

  • クエリを元に単票形式のフォームを作成したい。

    初歩的な質問ですみません。 期日切れのレコードだけを抽出するクエリを作成し、 それを単票形式のフォームで作成しようとしたのですが、作成できません。 手順は、 (1)フォームの新規作成をクリック (2)オートフォーム:単票形式を選択 (3)元となるテーブルまたはクエリの選択:該当のクエリを選択 (4)OKをクリック …しかし、何も起こりません。 原因は、抽出すべきレコードが無いからかと思い、 抽出条件に該当したレコードを作成しましたが、同じ結果でした。 一体、何が原因なのか分からず、皆さんに相談させていただきました。 よろしくお願いします。