VBAに記載している下記コードを、そのままフォームのプロパティ「フィルター」に入れましたがうまく絞り込みできません。どこか内容を変更するべきなのでしょうか。
Forms!F鑑賞.Filter = "月>=#" & DateSerial(Year(Date), Month(Date), 1) & "# AND 月<#" & DateSerial(Year(DateAdd("m", 1, Date)), Month(DateAdd("m", 1, Date)), 1) & "#"
Forms!F鑑賞.FilterOn = True
フィルターに入力してみた↓
"月>=#" & DateSerial(Year(Date), Month(Date), 1) & "# AND 月<#" & DateSerial(Year(DateAdd("m", 1, Date)), Month(DateAdd("m", 1, Date)), 1) & "#"
Forms!F鑑賞.FilterOn = True
に該当する設定はされていますか?FilterOn プロパティ
フィルターを適用して、Access データベースのレコードを選択して表示する - フィルターを保存する
何も設定されていなければ(デフォルトの設定だと)
[ホーム]>[並べ替えとフィルター]>[フィルターの実行]
または、
フォームのステータスバー>[フィルター処理なし/フィルター適用]
をクリックして手動でフィルターを適用することになります
フォームを開いたときに自動で適用するなら読み込み時にフィルターを適用プロパティを「はい」にします
ありがとうございます。
フォームを開いたときに自動で適用したかったのですが、フィルター適用プロパティが「いいえ」になっていたので変更しました。
しかし、新たに問題が起きました。
パラメータの確認ポップアップが出て「Date」と表示されます。
Date()
と記述してくださいコードでかっこを使用する
VBAコード上では括弧を省略してもいいし、VBEが自動で省略してくれる(
Date()
と記述してもDate
になる)のですが、クエリやフォーム上ではこのルールが使えないのできちんと括弧付きで記述する必要がありますありがとうございます。
Date()も試していたのですが、(記載すればよかったです、2度手間になりスミマセン)
それで行うと、絞り込みが行われませんでした。
今コピペして気づいたのですが、式が変わってしまっていますね・・・スミマセン。
最初の式でやり直してみます。
式を修正しました。下記の式なのですが、やはり絞り込みができません。。
※読み込み時にフィルターを適用プロパティを「はい」にしている状態
あぁ、すみません。そもそも「コードそのまま」がフィルターとして不適切ですね。フィルターとして設定する文字列はSQL(のWHERE句)に従った記述にしないといけません
VBAはSQLとして処理できる文字列を発行し、それをデータベースに処理させるという2段階の処理をしています。VBAとして発行したものをそのままフィルターに設置したいとなった場合は、たとえば
として表示される文字列を設定することになります。具体例を挙げると
のようになり、これをそのままフィルターに記述すれば動きます
VBAコード上で文字列を表すための「"」はVBAのための記述なのでフィルター用の文字列に含めてはいけません
この時「#~#」は、「直接記述した文字が日付ですよ」ということを表しています。VBAの出力からは人が見れば日付に見えるだけの文字でしかないので、SQLとして処理するために日付として扱ってほしい部分として「#」で囲っているわけです
これを直接SQLとして関数に置き換える場合「#」まで含めて書き直すこととなります。今回は、
DateSerial(Year(Date()), Month(Date()), 1)
自身が日付のデータとなるので、単純に「#」が不要になりますありがとうございます。
やっと理解できてきた気がします。
詳しく教えてくださり、本当に感謝の気持ちでいっぱいです。