• ベストアンサー

クエリ実行結果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にはなかなか手が回りませんが、ご教示いただいた点を参考にしつつ、勉強してみたいと思います。

関連するQ&A

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

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

  • 選択クエリで実行結果を非表示にできますか?

    自分がやろうとしていること自体が間違っているかもしれないのですが・・ Access2000で販売管理を作っています。請求書を発行する開始日付と終了日付を入力させる日付入力フォームがあります。この日付を元に売上TBから日付範囲内を抽出する選択クエリを作っています。(クエリの抽出条件にBetweenを使っています)。 そして請求書フォームでデータ表示させようと作っています。 これらを、日付入力フォームにあるコマンドボタンのクリックイベントで Docmd.OpenQuery "Q売上" ’日付範囲内の売上データ抽出クエリ Docmd.OpenForm "請求書" とすると請求書フォームにはデータが表示されるのですが、背面にQ売上の実行結果が表示されています。 この実行結果を表示させないようにはできないのでしょうか?(選択クエリとはOpen=実行でしょうか) ちなみに請求書フォームのレコードソースにQ売上を書こうとしましたが、抽出条件の日付が日付入力フォームなので記述方法がわかりません。 ややこしい質問で申し訳ございませんが宜しくお願い致します。

  • クエリの抽出結果がフォームに表示できない

    ACCESS2010を使用しています。 フォーム画面で、選択クエリのデータをコンボボックスで選択し結果を表示させ、その後エクセル形式でエクスポートしたいと思っています。 選択結果をエクセル形式でエクスポートはうまくいくのですが、フォーム画面には表示がされません。 Q_名簿では 授業名のフィールドに抽出条件として [Forms]![F_名簿表示画面]![combo1] としています。 また、コンボボックスで選択した後にフォームに表示させるコマンドボタンは下記のように記述しています。 この記述でフォームに表示がされなくて困っています。 Private Sub cmd名簿_Click() 'コンボボックス値指定→検索 Dim stList As String Dim stFil As String '[授業名]を指定 If combo1 <> "" Then stFil = "[授業名]='" & combo1 & "'" End If Me.Filter = stFil Me.FilterOn = True End Sub どうすればフォームに表示がされるでしょうか。 ご指導の程お願いいたします。

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

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

  • アクセスのフォーム

    アクセスのフォームで、ヘッダー部にボタンを3つ作成し、それぞれ名前を"1","2","3"とします。そして、全てのボタンに埋め込みマクロで"1"にはクエリ1を実行する、"2"にはクエリ2を実行する、"3"にはクエリ3を実行するというマクロを埋め込みます この時ボタンをクリックすると、その結果がフォームの詳細部分に表示させる事はできますか?例えば"2"をクリックすれば詳細部分にクエリ2の結果が表示される様にしたいです。それぞれのクエリの構成は異なります。テーブル形式で表示されるのではなく、フォームの形式で表示される様にしたいです。 表示された文字をクリックするとヘッダー部のテキストボックスにその文字が入力され、クエリの抽出条件がそのテキストボックスになっており、クエリ実行ボタンを押せばその抽出条件でクエリが実行され、詳細部分に表示・・・という様に検索できる様にしたいです。文字をクリックすればテキストボックスへというのは以前この場で教えて頂きました。 説明がうまくできなくてすいません。誰か教えて下さい。 よろしくお願いします。

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

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

  • ACCESSでフォームにクエリーの結果表示できる?

    ACCESS2000で、テーブルから入力用のフォームを作っています。主キーは日付とコードです。現在は日付に規定値でDATE()としていますが、本来はテーブル内で「コード=001で最大の日付」がデフォルトで表示され、変更もできるようにしたいです。クエリーからフォーム作ってみましたが更新できませんでした。ヘルプみたら主キーによって更新できない時もあるようで良く分かりませんでした。m(__)m 何か方法はないでしょうか? もし、だめなら別テキストボックスに最大の日付だけでも表示できればいいと思っています。 よろしくお願いします。

  • ACCESSのフォームで、絞込み検索すると重複したレコードが増えてしま

    ACCESSのフォームで、絞込み検索すると重複したレコードが増えてしまいます。 ACCESSのフォームで、コンボボックスを6ほど設置し、条件を絞り込んでデータを抽出するシステムを作成しました。 抽出自体は問題なく出来ているのですが、再クエリを実行した時、同じ抽出条件と結果が複数レコード表示されてしまいます。 調査した結果、フォームプロパティのレコードソースに設定していますクエリの実行結果の件数と同じ件数分増えてしまうようです。 そして、そのフォームをしばらく使用していますと、「これ以上テーブルを開くことができません。」とのメッセージが出てしまいます。 これも何か関係しているのでしょうか? いろいろと調べてみましたが、解決する事ができませんでした。ご指導、宜しくお願いします。

  • <<ACCESS2000>>クエリの結果をエクセルで表示させることはできますか?

    宜しくお願いします。 アクセスのクエリで実行した内容を フォームではなく、エクセルで表示させたいのですが、方法はありますか? フォームのように開くとマクロなどでクエリが 勝手に動き、結果がエクセルで表示される様にしたいのですが。

  • クエリ「パラメータ」検索結果を単票と一覧で表示II

    [使用ツール]ACCESS2007 [データベースの構成] テーブル名:情報データベース 単票フォーム名:情報フォーム 一覧フォーム名:情報一覧フォーム クエリ名:情報クエリ=「抽出条件」欄のパラメーター「Like "*" & [情報検索] & "*"」 [やりたいこと] 情報クエリ「パラメーター」の検索結果を単票「単票フォーム」と「一覧フォーム」を使い分けて閲覧効率を上げたい。 [考えたこと、やってみたこと] ケース1:検索結果5レコード以下「単票フォーム」、5レコード以上「一覧フォーム」で開く。 ケース2:埋め込みマクロで「単票フォーム」「一覧フォーム」の両方同時に開き「一覧フォーム」は最小化させる。「単票フォーム」を閉じると「一覧フォーム」が開く。 [確認できた課題] ケース1:多少の理解が可能な「埋め込みマクロ」で考えたが、スキル不足で試作にも入れず。 ケース2:「単票フォーム」「帳票フォーム」を同時に開いた時点で、両方の「パラメータダイアログ」が表示され、入力しないと「帳票フォーム」は最小化されない問題を解決できない。 (現状のスキルでは「単票フォーム」にコマンドボタンを配し、コマンドボタンで「帳票フォーム」を開いて検索を行う方法になり、操作「手間」を考えると結果的に非効率である。) [わかったこと] ケース1の方が設定後に「レコード数」の希望数値に変更することで調整が可能であり、設定全体を大きく変更することもないのでスキルが低くても使い続けられる。 【追 伸】 アドバイスをお願いするに当たり、スキル(質問者として)を知って頂くことが必要だと改めて感じて居ります。その為には情報をお伝えする以外にないと思いました「面倒だから聞いて居ると思われない為にも!」。今回、以下の内容で最初に質問させていただきましたが、「実現の可否も想像すらできておりませんでしたので、一旦、実現に向けて再度考えてみて質問IIとしました。(短絡的に取り下げたのではなく、実現の可否判断ができない為)」 [やりたいこと] 情報クエリ「パラメーター」の検索結果を単票「情報フォーム」で表示させていますが、レコード数が多い場合に一覧表示「情報一覧フォーム」させたいと考えています。 [希望の動作] 検索結果を単票「情報フォーム」で表示の後、レコード数の多い場合に情報フォームに配した「コマンドボタン」をクリックすることで、単票での検索済結果を「情報一覧フォーム」へ一覧表示させたい。 宜しく、お願いします。

専門家に質問してみよう