プロが教えるわが家の防犯対策術!

フォームヘッダー上で、(指定月日)の名前をつけてあるテキストボックスに、(月日)を入力し、コマンドボタンの(月日抽出)をクリックして、該当するデータがあれば、フォーム詳細で該当するレコードが抽出されるようになっています。
また、(月日)を入力せずに月日抽出ボタンをクリックすると「日付が未入力です」までのメッセージを出すことはできます。該当するレコードがない場合「該当するデーターはありません」のメッセージを出すには、下記の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

A 回答 (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
    • good
    • 0
この回答へのお礼

できました! 
piroin654の回答がなければまだ解決できませんでした。
ご丁寧に何回も答えていただき、本当にありがとうございました。

お礼日時:2011/08/06 03:41

レコード数が相当数抽出される場合が


あるかもしれないので、

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

補足日時:2011/08/04 22:55
    • good
    • 0

No3の、



「20110803 の形式で入力している場合」の

>'Me.Filter = "月日=#" & Format(指定月日, "@@@@/@@/@@") & "#"

は、正確には 指定月日 を Me![指定月日] として、


'Me.Filter = "月日=#" & Format(Me![指定月日], "@@@@/@@/@@") & "#"


ですね。
    • good
    • 0

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


両方の形式で入力しても対応することもできますが、
そこまで凝る必要はないかもしれません。一応、上記の
記述をそのまま応用すればできます。
    • good
    • 0

テキストボックス「指定月日」には、



2011/08/03

あるいは、

20110803

のどちらの形式での入力なのか、
あるいは違う入力のしかたをしていますか?

この回答への補足

テキストボックス「指定月日」は2011/08/03の形式となっています。
お手数掛けますがよろしくお願いします。

補足日時:2011/08/04 05:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A