1

ユーザーが VBA を介して動的に作成されたクエリ結果に表示する 40 以上のフィールドのいずれかを選択できるように、フィルターを作成しようとしています。

これは、多くのプログラムで標準的に見られるものであるため、車輪を再発明することなく、誰かがそれを行うコードを持っている必要があると思います。残念ながら、私はそれをオンラインで見つけることができませんでした。

基本的に、開始時にすべてのフィールド名が左側のボックスにリストされ、右側のボックスは空です。ユーザーは、右矢印ボタンをクリックしてフィールドを右ボックスに移動するか、左矢印をクリックしてフィールドを削除し、左ボックスに戻すことができます。また、ユーザーは上下の矢印ボタンを使用して、右側のリストボックスで選択したフィールドの順序を変更できます。

適切なリストボックスにデータを入力して正しく並べ替えると、クエリを適切に実行する方法がわかります。

4

1 に答える 1

0

この完全な例が見つからない場合は、自分で段階的に作業する必要があります。コントロールのMSDN リンクは次のとおりです。ListBoxページの下部に、このコントロールのさまざまなメソッドとプロパティへのリンクがあります。

基本的に、ボタン (矢印) をクリックすると Click イベントがトリガーされます。この場合、Selectedアイテムを見つけるためにループする必要があるかもしれません。リストボックスが複数選択の場合、ItemsSelectedコレクションを調べることができます。次に、 メソッドAddItemRemoveItemメソッドを使用して、右から左または左から右に移動します。

フィールド リスト オプションがテーブルにバインドされているのか、それともフォームがロードされたときに一度だけリストにデータを入力するだけなのか、現時点では思い出せません。バインドされている場合は、代わりに [値リスト] オプションを使用し、VBA を使用してすべてのフィールド名を取得し、これらを使用して を設定するRowSource必要があります (既に行っている可能性があります)。

どちらのイベント(フィールドまたは値リスト)でも、リストが自動的にソートされたままになるとは思いません(VB.NETとは異なります)。おそらく、RowSource を (動的) 配列に分割し、配列をソートする単純なソート ルーチンを見つけて、ソートされた項目をRowSource.

別の方法として、2 つの一時テーブルを作成し、ADO (または DAO) を使用してそれらの間で行を挿入および削除し、そのたびに SELECT ステートメントを使用してリストを再作成することもできます。これには、毎回リストをソートするための ORDER BY 句を SELECT に含めることができるという利点があります。ただし、おそらくもう少し手間がかかります (一時テーブルを維持および削除するため)。

ただし、例がどこかにあると思われるので、検索を続けたいと思うかもしれません。幸運を。

于 2013-06-19T23:32:26.073 に答える