• ベストアンサー

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

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.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

yanohara
質問者

お礼

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

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

レコード数が相当数抽出される場合が あるかもしれないので、 Dim i As Integer を Dim i As Long にしておいてください。

yanohara
質問者

補足

できました! さらにもうひとつ質問があります。 同じように(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)
回答No.3

No3の、 「20110803 の形式で入力している場合」の >'Me.Filter = "月日=#" & Format(指定月日, "@@@@/@@/@@") & "#" は、正確には 指定月日 を Me![指定月日] として、 'Me.Filter = "月日=#" & Format(Me![指定月日], "@@@@/@@/@@") & "#" ですね。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

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)
回答No.1

テキストボックス「指定月日」には、 2011/08/03 あるいは、 20110803 のどちらの形式での入力なのか、 あるいは違う入力のしかたをしていますか?

yanohara
質問者

補足

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

関連するQ&A

専門家に質問してみよう