Microsoft Access 掲示板

一致検索とNOT検索に日付を追加して検索、レポート出力したい

2 コメント
views
4 フォロー

以前ここで 一致検索とNOT検索の方法を教えて頂きました。
Windows10 office365を使用中です。

自分なりに、転用して使用していたのですが、
この中に 処理月(yyyy/mm/dd)を yy/mm の年と月のみに表示して 期間自~期間至のように絞り込みも行いたいと考え、他の方の回答を参考に日付けを設定してみました。
二つのテキストボックスの「定型入力」プロパティは 99¥/99;0;_ にしました。

教えて頂いたのは 以下のVBAです。

Private Sub プレビュー_Click()
    Dim strFilter As String
    
    If Not IsNull(Me.年度検索) And Not IsNull(Me.年度検索2) Then
        MsgBox "[指定年度]と[除く年度]を両方入力することはできません!"
        Exit Sub
    End If
    
    If Not IsNull(Me.年度検索) Then
        strFilter = strFilter & " AND 年度=" & Me.年度検索
    End If
    
    If Not IsNull(Me.月検索) Then
        strFilter = strFilter & " AND 月=" & Me.月検索
    End If
    
    If Not IsNull(Me.年度検索2) Then
        strFilter = strFilter & " AND 年度<>" & Me.年度検索2
    End If
    
    strFilter = Mid(strFilter, 6) '先頭の" AND"を削除
    
    If DCount("*", "年度登録", strFilter) = 0 Then
        MsgBox "該当するレコードはありません。"
    Else
        DoCmd.OpenReport "レポート名", acViewPreview, , strFilter
    End If
End Sub

上記の中に追加したVBA

If Not IsNull(Me.期間自) Then
    If Me.期間自 > Format(Date, "yy/mm") Then
        strFilter = strFilter & " AND 処理日 >= #" & "19" & Nz(Me.期間自) & "#"
    Else
        strFilter = strFilter & " AND 処理日 >= #" & "20" & Nz(Me.期間自) & "#"
    End If
    End If

    If Not IsNull(Me.期間至) Then
    If Me.期間至 > Format(Date, "yy/mm") Then
        strFilter = strFilter & " AND 処理日 < #" & DateAdd("m", 1, "19" & Me.期間至) & "#"
    Else
        strFilter = strFilter & " AND 処理日 < #" & DateAdd("m", 1, "20" & Me.期間至) & "#"
    End If
    End If

ここで、自分のPCでは動作するのですが、ある一台のPCだけ
日付でエラーが出てしまい、動作しません。
例えば 期間自テキストボックスに 20/04  期間至テキストボックスに 20/10 と入れた場合

実行時エラー‘3075’
クエリ式‘処理日>=#2020/04#AND処理日<#令2年11月1日(日)#AND年度=201’の日付の構文エラーです。

と、エラーになります。
同時期に購入したPCですので、設定も全く同じものなのに、どうして一台だけエラーになるのか、全くわからず困っています。
何か解決方法はございませんでしょうか?
よろしくお願いいたします。

まだまだ勉強中。
作成: 2020/10/22 (木) 14:42:39
最終更新: 2020/10/22 (木) 14:46:10
通報 ...
1

OSの日付書式設定が他のPCと異なっているのが原因だと思われます。

OSの日付書式設定の影響を受けないようにFormatで書式を設定するといいでしょう。

    If Me.期間至 > Format(Date, "yy/mm") Then
        strFilter = strFilter & " AND 処理日 < #" & DateAdd("m", 1, "19" & Me.期間至) & "#"
    Else
        strFilter = strFilter & " AND 処理日 < #" & DateAdd("m", 1, "20" & Me.期間至) & "#"
    End If

この部分を下記に修正

    If Me.期間至 > Format(Date, "yy/mm") Then
        strFilter = strFilter & " AND 処理日 < #" & Format(DateAdd("m", 1, "19" & Me.期間至), "yyyy/mm/dd") & "#"
    Else
        strFilter = strFilter & " AND 処理日 < #" & Format(DateAdd("m", 1, "20" & Me.期間至), "yyyy/mm/dd") & "#"
    End If
2
まだまだ勉強中。 2020/10/22 (木) 15:57:01 dfb63@96e2f >> 1

早急にご回答頂きありがとうございます。
Formatで書式をし、動作確認を行いました。

 エラーの出る一台を調べたところ、そのPCだけ日付書式設定が 和暦となっており、
こんなところに原因が!と考えてしまいました。
思うように動くようになり、本当に助かりました。
ありがとうございました。😊