hiroton
2020/09/24 (木) 16:06:09
7c0ec@f966d
構想だけ
フォームヘッダーの部分って列のラベル表示とかしていますか?
この部分にコントロールを2つ重ねて
下:テキストボックス(コンボボックス)でフィルタ用
上:テキストボックスでラベル表示用
両方ともタブストップを「しない」
ラベル用コントロールでフォーカス取得時にフィルタ用にSetFocus
コントロールソースは「="ラベル名"&IIf([フィルタ用]<>"","▼","▽")
」
これで少しはそれっぽい見た目になるんじゃないかと思います
通報 ...
なるほど、そういう手もありますね。
右クリック、コンボボックス、データシートビュー、
3つの可能性から検討していきたいと思います。
ありがとうございました!
2種類、検索をヘッダーに作りたいページがあり、1つはhatena様に教えていただいた方法、もう1つはコンボボックスが多いのでhiroton様に教えていただいた方法を使わせていただくことにしました!
そこで質問です。
①「="ラベル名"&IIf([フィルタ用]<>"","▼","▽")」なのですが、
フィルタ用の部分は何を指定するイメージでしょうか。
わからず…スミマセン。
②「フォーカス取得時にフィルタ用にSetFocus」という意図は
下記ですよね。
'''Private Sub txt検索_GotFocus()
Me.cbo検索.SetFocus
End Sub
'''
③絞り込みは重ねていくことはできますでしょうか。
色々聞いてスミマセン。宜しくお願いいたします。
イメージしてるものに齟齬があるような気がしないでもないですが
hatenaさんのブログのサンプルを例にとるならば
="社員コード"&IIf([txt社員コード]<>"","▼","▽")
や
="フリガナ"&IIf([txtフリガナ]<>"","▼","▽")
みたいな感じです。フィルタをかけているフィールド(列)は「▽」が「▼」になって区別できるという仕組みです
フォーカス取得時はEnterですねGotFocusでもほぼ変わらないのでどちらでもいいですが
ちょっと質問の内容が理解できていません。フィルタの仕組み自体はhatenaさんのブログにあるような、フィールド(列)毎にフィルタ用のテキストボックス(またはコンボボックス)を用意するというだけのものです
この方法の問題点
フォーカスのあるコントロールは最前面に表示されるという仕様を使っているので期間指定(min、maxでテキストボックスを2つ用意したい)みたいなのはどうしたもんかとなります
▽(▼)について
上で軽く触れましたが、フィルタの内容を入力するテキストボックス(コンボボックス)は基本的にフィールド(列)のラベルに隠れた状態になるのでフィルタを適用しているフィールド(列)がどこなのかぱっと見でわかるようにするためのものです。この部分だけ独立させるとサイズやフォントを変えたり右端に寄せたりしてもう少しExcelっぽくできそうな気もします
条件付き書式を使ってみるという手もあるかもしれません
VBAの実装について
フィールド(列)のラベルとして使うコントロールを例えば「列ラベル_txt社員コード」のようにしたとすると
のようになりますが、コントロール数分記述するのは手間だしVBAコードが見づらくなります。フィルタの内容を入力するコントロールを例えばすべて「フィルタ_○○」のように統一して
のような関数を作るとフォーカス取得時イベントに[イベントプロシージャ]を指定してコードを記述する代わりに
=setFocusFilterControl()
を設定するだけで済むのでいろいろはかどります詳しく教えていただき、ありがとうございます!
じっくり確認させていただき、不明点があった場合は改めて質問させていただきます。
③の質問については、hatena様のVBAで作成できますよね…大変失礼いたしました。VBAで実行可能なことは承知の上で、1個質問です。
クエリデザインで作成することは可能でしょうか?不可能であれば諦めがつくので教えていただけると幸いです。可能だとすると、コンボボックスに工夫が必要になりますでしょうか。だとすると、VBAのほうが楽でしょうか。
※帳票スタイルのリストに対して、フィールドごとにコンボボックスがあり、複数の絞り込み条件を重ねる際、クエリデザインで設計できるか?という質問です。わかりづらくてスミマセン
フィルタ用のテキストボックス、コンボボックスが空白の時の処理を考える必要があります
VBAの場合、
この形で「そもそもフィルタリングしない」を選べますが、クエリデザインの場合「必ず何かしらの抽出条件を設定する」ことになるため任意のフィールドでフィルタリングするようなのはひと手間必要です
■コンボボックスが片方空っぽでも(魔法使いの開発工房さん)
または、Nullを許可しないフィールド限定になりますが
というような方法もあります
そもそもNullを抽出したい場合には
Is Null
と指定する必要がある。なんかもVBAなら柔軟に処理できるメリットがありますね慣れの問題なのでどちらが楽かとは一概に言えないですが、余計な処理をしない点でVBAのほうがより良いものです