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)
自身が日付のデータとなるので、単純に「#」が不要になります
通報 ...