Microsoft Access 掲示板

フォームのフィルタープロパティ / 7

8 コメント
views
4 フォロー
7
hiroton 2020/11/25 (水) 11:11:46 6ffb1@f966d

あぁ、すみません。そもそも「コードそのまま」がフィルターとして不適切ですね。フィルターとして設定する文字列はSQL(のWHERE句)に従った記述にしないといけません

日付>=DateSerial(Year(Date()), Month(Date()), 1) AND 日付<DateSerial(Year(DateAdd("m", 1, Date())), Month(DateAdd("m", 1, Date())), 1)

VBAはSQLとして処理できる文字列を発行し、それをデータベースに処理させるという2段階の処理をしています。VBAとして発行したものをそのままフィルターに設置したいとなった場合は、たとえば

MsgBox Forms!F鑑賞.Filter

として表示される文字列を設定することになります。具体例を挙げると

月>=#2020/11/01# AND 月<#2020/12/01#

のようになり、これをそのままフィルターに記述すれば動きます

VBAコード上で文字列を表すための「"」はVBAのための記述なのでフィルター用の文字列に含めてはいけません

この時「#~#」は、「直接記述した文字が日付ですよ」ということを表しています。VBAの出力からは人が見れば日付に見えるだけの文字でしかないので、SQLとして処理するために日付として扱ってほしい部分として「#」で囲っているわけです

これを直接SQLとして関数に置き換える場合「#」まで含めて書き直すこととなります。今回は、DateSerial(Year(Date()), Month(Date()), 1)自身が日付のデータとなるので、単純に「#」が不要になります

通報 ...