- ベストアンサー
accessで該当するレコードがない場合
フォームヘッダー上で、(指定月日)の名前をつけてあるテキストボックスに、(月日)を入力し、コマンドボタンの(月日抽出)をクリックして、該当するデータがあれば、フォーム詳細で該当するレコードが抽出されるようになっています。 また、(月日)を入力せずに月日抽出ボタンをクリックすると「日付が未入力です」までのメッセージを出すことはできます。該当するレコードがない場合「該当するデーターはありません」のメッセージを出すには、下記のVBAをどうすればいいのでしょうか? dcountを使えばいいらしいのですが?わかりません。 ちなみにテーブル名は「実施T」です。よろしくお願いします。 Private Sub 月日抽出_Click() On Error GoTo errmsg Me.Filter = "月日=#" & Format(指定月日, "yyyy/mm/dd") & "#" Me.FilterOn = True Exit Sub errmsg: MsgBox "日付が未入力です" End Sub
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
以下で。日付の未入力は個別に最初に判断します。 Private Sub 月日抽出_Click() Dim i As Long If IsNull(Me!txt開始日) Then MsgBox "開始日が入力されていません" Exit Sub End If If IsNull(Me!txt終了日) Then MsgBox "終了日が入力されていません" Exit Sub End If '以下の i = DCount・・ はどちらでもいいです。 'i = DCount("*", "実施T", "[月日] between #" & Me!txt開始日 & "# And #" & Me!txt終了日 & "#") i = DCount("月日", "実施T", "[月日] between #" & Me!txt開始日 & "# And #" & Me!txt終了日 & "#") If i > 0 Then Me.Filter = "月日 between #" & Me!txt開始日 & "# and #" & Me!txt終了日 & "#" Me.FilterOn = True Else MsgBox "データがありません" End If End Sub
その他の回答 (4)
- piroin654
- ベストアンサー率75% (692/917)
レコード数が相当数抽出される場合が あるかもしれないので、 Dim i As Integer を Dim i As Long にしておいてください。
補足
できました! さらにもうひとつ質問があります。 同じように(txt開始日)と(txt終了日)の名前がついたテキストボックスがそれぞれ一つずつあり、 期間抽出も行っています。開始日と終了日に月日を入力し、(抽出)の名前がついたコマンドボタンをクリックし、該当するレコードがあれば、フォーム詳細上に表示されるようにもなっています。 記述は下記のとおりです。 このケースの場合で該当するレコードがない時のメッセージを出すにはどうすればいいでしょうか? よろしくお願いします。 Private Sub 抽出_Click() On Error GoTo errmsg Me.Filter = "月日 between #" & Me!txt開始日 & "# and #" & Me!txt終了日 & "#" Me.FilterOn = True Exit Sub errmsg: MsgBox "日付が未入力です" End Sub
- piroin654
- ベストアンサー率75% (692/917)
No3の、 「20110803 の形式で入力している場合」の >'Me.Filter = "月日=#" & Format(指定月日, "@@@@/@@/@@") & "#" は、正確には 指定月日 を Me![指定月日] として、 'Me.Filter = "月日=#" & Format(Me![指定月日], "@@@@/@@/@@") & "#" ですね。
- piroin654
- ベストアンサー率75% (692/917)
No1です。 2011/08/03の形式と20110803での形式で 入力する両方の場合を一度にいれておきます。 どちらか選んでください。 Private Sub 月日抽出_Click() '##########2011/08/03 の形式で入力している場合########## Dim i As Integer On Error GoTo errmsg i = DCount("*", "実施T", "月日=#" & Me![指定月日] & "#") If i > 0 Then Me.Filter = "月日=#" & Me![指定月日] & "#" Me.FilterOn = True Else MsgBox "データがありません" End If Exit Sub errmsg: MsgBox "日付が未入力です" '####################ここまで########################## '##########20110803 の形式で入力している場合############ 'Dim i As Integer 'On Error GoTo errmsg 'i = DCount("*", "実施T", "月日=#" & CDate(Format(Me![指定月日], "@@@@/@@/@@")) & "#") 'If i > 0 Then 'Me.Filter = "月日=#" & Format(指定月日, "@@@@/@@/@@") & "#" 'Me.FilterOn = True 'Else 'MsgBox "データがありません" 'End If 'Exit Sub 'errmsg: 'MsgBox "日付が未入力です" '################ここまで############################### End Sub 両方の形式で入力しても対応することもできますが、 そこまで凝る必要はないかもしれません。一応、上記の 記述をそのまま応用すればできます。
- piroin654
- ベストアンサー率75% (692/917)
テキストボックス「指定月日」には、 2011/08/03 あるいは、 20110803 のどちらの形式での入力なのか、 あるいは違う入力のしかたをしていますか?
補足
テキストボックス「指定月日」は2011/08/03の形式となっています。 お手数掛けますがよろしくお願いします。
お礼
できました! piroin654の回答がなければまだ解決できませんでした。 ご丁寧に何回も答えていただき、本当にありがとうございました。