Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2007)
パラメータクエリのキャンセル方法
投稿日時: 18/07/07 10:28:22
投稿者: dmso0307

はじめまして、よろしくお願いします。
Access初心者で苦労しています。
今、フォームからパラメータをクエリに渡してデータを抽出しているのでが、パラメータを渡すフォームをパラメータを入力せずキャンセルでフォームを閉じて操作を中止したのですが、フォームを閉じてもパラメータークエリが動きパラメータが要求されます。
この要求を無くしてキャンセルさせる方法を教えてください。
 
現在、フォーム(利用曜日検索F)にパラメータを渡すテキスト(検索曜日)を作り、
検索内容を検索クエリのフィールドに[forms]![利用曜日検索F]![検索曜日]と書き込んでいます。
 
わかりにくいかと思いますがよろしくお願い親します。

回答
投稿日時: 18/07/09 16:32:24
投稿者: Suzu

引用:
パラメータを渡すフォームをパラメータを入力せずキャンセルでフォームを閉じて操作を中止したのですが、フォームを閉じてもパラメータークエリが動きパラメータが要求されます。

 
確認です。
・「キャンセル」とは、フォーム上に配置してある、コマンドボタン
・パラメーターダイアログの「キャンセル」
どちらでしょう?
 
多分前者ですよね?
そのコマンドボタンには、マクロまたはVBAが設定されているのではありませんか?
その内容はどのような内容でしょうか?

投稿日時: 18/07/09 20:28:13
投稿者: dmso0307

連絡ありがとうございます。
現在、レポートにフォームに入力した日付を曜日に変換してクエリに送り、曜日のパラメータ([forms]![利用曜日検索F]![検索曜日])で「曜日の情報」をレポートするものです。

「日付入力用のフォーム(利用曜日検索F)」を作り、「日付入力ボックス(日付指定)」および入力した「日付」を曜日に変換する「テキストボックス(検索曜日)」と「実行ボタン」を作り、「実行ボタン」クリックでパラメータをレポートに送るものです。
この「日付入力用のフォーム(利用曜日検索F)」にキャンセルボタンを作りたいのですが、その方法が解りません。
レポート側の「レポートを開くときイベント」に
Private Sub Report_Open(cancel As Integer)
'レポートを開くとき
    If MsgBox("指定の日付で検索します。よろしいですか?", vbYesNo, "検索確認") = vbNo Then
        MsgBox ("検索がキャンセルされました。")
        cancel = True
        Exit Sub
    End If
 
  'パラメータ入力ダイアログを開く
  DoCmd.OpenForm "利用曜日検索F", , , , , acDialog
End Sub
とすれば良いのは解るのですが、日付入力用のフォームからキャンセルする方法が解りません。
日付入力用のフォームの「実行ボタン」には下記のようにしています。
 
Private Sub 実行_Click()
'[OK]ボタンクリック時
  'このフォームを非表示にする
  Me.Visible = False
End Sub
 
Private Sub 日付指定_AfterUpdate()
'カーソルを実行に移動させる
実行.SetFocus
End Sub
 
説明がまずくてすみません。
よろしくお願いします。
 

回答
投稿日時: 18/07/09 21:17:25
投稿者: hatena
投稿者のウェブサイトに移動

「利用曜日検索F」フォームにコマンドボタン「キャンセル」を配置して、
 
Private Sub キャンセル_Click()
    Me.Tab = "キャンセル"
'[キャンセル]ボタンクリック時
  'このフォームを非表示にする
    Me.Visible = False
End Sub
 
レポート側の「開くとき」イベントプロシージャ
Private Sub Report_Open(cancel As Integer)
  
    'パラメータ入力ダイアログを開く
    DoCmd.OpenForm "利用曜日検索F", , , , , acDialog
    If Forms!利用曜日検索F.Tag = "キャンセル" Then
        MsgBox ("検索がキャンセルされました。")
        cancel = True
        DoCmd.Close acForm, "利用曜日検索F"
    End If
End Sub
 
レポート側の「閉じるとき」イベントプロシージャ
Private Sub Report_Close()
    DoCmd.Close acForm, "利用曜日検索F"
End Sub

回答
投稿日時: 18/07/09 21:29:17
投稿者: hatena
投稿者のウェブサイトに移動

ただ、レポートのレコードソースには抽出条件は設定せずに、
「利用曜日検索F」から、レポートを開くようにして、そのときに抽出条件を設定する設計にした方がはるかにシンプルだしメンテもしやすいと思います。
 
 
Private Sub 実行_Click()
    DoCmd.OpenReport "レポート名", acViewPreview, , _
        "曜日='" & Me.検索曜日 & "'"
End Sub
 
Private Sub キャンセル_Click()
    DoCmd.Close
End Sub
 
 
レポートのレコードソースに「曜日」というフィールドがある前提ですが、
ここは実際のフィールド名に変更してください。

投稿日時: 18/07/10 21:28:17
投稿者: dmso0307

hatena 様
ありがとうございました。
おかげで希望のことができるようになりました。
また、改善方法もお教えいただきありがとうございます、確かにこちらの方がシンプルで確実ですね。
勉強させて頂きました。