Microsoft Access 掲示板

データシートビューにするのが良いのか / 9

11 コメント
views
4 フォロー
9
hiroton 2020/10/04 (日) 22:57:03 4e4b1@358c8 >> 3

イメージしてるものに齟齬があるような気がしないでもないですが

①「="ラベル名"&IIf([フィルタ用]<>"","▼","▽")」なのですが、

hatenaさんのブログのサンプルを例にとるならば
="社員コード"&IIf([txt社員コード]<>"","▼","▽")

="フリガナ"&IIf([txtフリガナ]<>"","▼","▽")
みたいな感じです。フィルタをかけているフィールド(列)は「▽」が「▼」になって区別できるという仕組みです

②「フォーカス取得時にフィルタ用にSetFocus」という意図は

フォーカス取得時EnterですねGotFocusでもほぼ変わらないのでどちらでもいいですが

③絞り込みは重ねていくことはできますでしょうか。

ちょっと質問の内容が理解できていません。フィルタの仕組み自体はhatenaさんのブログにあるような、フィールド(列)毎にフィルタ用のテキストボックス(またはコンボボックス)を用意するというだけのものです


この方法の問題点
フォーカスのあるコントロールは最前面に表示されるという仕様を使っているので期間指定(min、maxでテキストボックスを2つ用意したい)みたいなのはどうしたもんかとなります


▽(▼)について
上で軽く触れましたが、フィルタの内容を入力するテキストボックス(コンボボックス)は基本的にフィールド(列)のラベルに隠れた状態になるのでフィルタを適用しているフィールド(列)がどこなのかぱっと見でわかるようにするためのものです。この部分だけ独立させるとサイズやフォントを変えたり右端に寄せたりしてもう少しExcelっぽくできそうな気もします
条件付き書式を使ってみるという手もあるかもしれません


VBAの実装について
フィールド(列)のラベルとして使うコントロールを例えば「列ラベル_txt社員コード」のようにしたとすると

Private Sub 列ラベル_txt社員コード_Enter()
    Me.txt社員コード.SetFocus
End Sub

のようになりますが、コントロール数分記述するのは手間だしVBAコードが見づらくなります。フィルタの内容を入力するコントロールを例えばすべて「フィルタ_○○」のように統一して

Private Function setFocusFilterControl()
    Me(Replace(Me.ActiveControl.Name,"列ラベル_","フィルタ_")).SetFocus
End Sub

のような関数を作るとフォーカス取得時イベントに[イベントプロシージャ]を指定してコードを記述する代わりに=setFocusFilterControl()を設定するだけで済むのでいろいろはかどります

通報 ...
  • 10
    セロハン 2020/10/06 (火) 09:08:34 0029a@1c915 >> 9

    詳しく教えていただき、ありがとうございます!
    じっくり確認させていただき、不明点があった場合は改めて質問させていただきます。
    ③の質問については、hatena様のVBAで作成できますよね…大変失礼いたしました。VBAで実行可能なことは承知の上で、1個質問です。
    クエリデザインで作成することは可能でしょうか?不可能であれば諦めがつくので教えていただけると幸いです。可能だとすると、コンボボックスに工夫が必要になりますでしょうか。だとすると、VBAのほうが楽でしょうか。
    ※帳票スタイルのリストに対して、フィールドごとにコンボボックスがあり、複数の絞り込み条件を重ねる際、クエリデザインで設計できるか?という質問です。わかりづらくてスミマセン