- ベストアンサー
アクセス2000でのフィルターの記述方法。
アクセス2000で質問です。 フォームのプロパティでフィルターを使おうとしています。 あるフィールドがブランクの場合のみフォームに表示する、または文字が 入っている場合のみフォームに表示する、という事で2つのフォームを使い わけたいのです。 その場合の「フィルター」欄への記述の仕方がわかりません。 どうぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
蛇足ですが、フィルターに記述する条件は、 IsNull([フィールド名]) の代わりに[フィールド名] Is Null IsNull([フィールド名])=Falseの代わりに[フィールド名] Is Not Null でも可能です。 それは、おいといて、・・・・ フォームでフィルターを使うためには、 フォームビューツールバーにあるフィルタの実行ボタン(じょうごの形のボタン)が押し込まれた状態でないとフィルター欄に記述した条件での抽出はできません。 フォームを開いた直後は、このボタンがOFFになっていますので、フォームを開いた後、このボタンをクリックする必要があります。 このフィルタの実行ボタンをフォームを開いたときに自動的にONしたいときには、フォームを開くイベントで、フィルターをONにする処理をいれなければなりません。(下記にサンプルを示します。) Private Sub Form_Open(Cancel As Integer) Me.FilterOn = True End Sub もちろんNo.1で回答したようにボタンを作ってフィルターの条件を切り替える方法もあります。(Me.FilterOn = Trueの処理を入れていますので) あと、フィルターを使わずに抽出するには、No.1で回答したようにレコードソースにSQL文を入れる方法もありますが、さらに簡単なVBAを使わない方法として、 「抽出するクエリを作成しておいて、このクエリをフォームのレコードソースにする。」 という方法もあります。 この場合クエリの抽出条件を データがないものを抽出したいならば、該当するフィールドの抽出条件をIs Null データがあるものを抽出したいならば、該当するフィールドの抽出条件をIs Not Null とします。 ご参考になれば幸いです。m(__)m
その他の回答 (1)
- ShadowMoon
- ベストアンサー率59% (73/122)
>あるフィールドがブランクの場合のみフォームに表示する、または文字が 入っている場合のみフォームに表示する、という事で2つのフォームを使い わけたいのです。 「あるフィールドがブランクの場合のみフォームに表示」の場合は、フィルター欄に IsNull([フィールド名]) または、 IsNull([フィールド名])=true 「文字が入っている場合のみフォームに表示する」の場合は、フィルター欄に IsNull([フィールド名])=False と記入します。 1つのフォームで、ボタン操作によって切り替えたいなら次のようにするといいでしょう。 ボタンを3つ作ります。(フィルター実行1、フィルター実行2、フィルター解除) それぞれのクリック時イベントに次のコードを貼り付けます。 (フィールド名は、仮に所属部署名としておきます。) Private Sub フィルタの実行1_Click() On Error GoTo Err_フィルタの実行1_Click DoCmd.ApplyFilter , "IsNull([所属部署名]) " Me.FilterOn = True Exit_フィルタの実行1_Click: Exit Sub Err_フィルタの実行1_Click: MsgBox Err.Description Resume Exit_フィルタの実行1_Click End Sub Private Sub フィルタの実行2_Click() On Error GoTo Err_フィルタの実行2_Click DoCmd.ApplyFilter , "IsNull([所属部署名])=False" Me.FilterOn = True Exit_フィルタの実行2_Click: Exit Sub Err_フィルタの実行2_Click: MsgBox Err.Description Resume Exit_フィルタの実行2_Click End Sub Private Sub フィルタの解除_Click() On Error GoTo Err_フィルタの解除_Click Me.FilterOn = False Exit_フィルタの解除_Click: Exit Sub Err_フィルタの解除_Click: MsgBox Err.Description Resume Exit_フィルタの解除_Click End Sub としてもいいかなと思います。 あとフィルターを使わずにレコードソースにSQL文を入れる方法もありますが、長くなるので割愛させていただきます。(個人的にはSQL文が好き。) ご参考になれば幸いです。m(__)m
補足
すっかり遅くなり申し訳ありません。 伝授いただいた通り入力したのですが、どうもうまくいきません。 実はそのフィールドは日付形式なのでそれも影響してるのかと思い、 試しに普通のテキストフィールドでもやってみたのですが、やはりダメでした。 原因としてどういうことが考えられるでしょうか? お手数ですが、よろしくお願いします。
お礼
>フォームでフィルターを使うためには、 >フォームビューツールバーにあるフィルタの実行ボタン >(じょうごの形のボタン)が押し込まれた状態でないと >フィルター欄に記述した条件での抽出はできません。 全然知りませんでした。なるほどうまくいかないわけですね。 オープン時のイベントで設定し、うまくいきました。 どうもありがとうございました!