#693 オプショングループに抽出と”すべて”ボタンによる解除機能を設けるには? フォーム、VBA

メインフォームにあるテキストボックスに入力された値を条件にサブフォームのレコードを抽出したり、コンボボックスで選択されたリスト項目を条件に抽出したりといった画面はよく使われます。同様に、メインフォームにオプショングループコントロールを配置し、その中にある複数のトグルボタンの選択に応じて抽出することもよくあります。

ここでは、トグルボタンによって抽出する画面において、”すべて”を表示する、すなわち抽出を解除して全レコードを表示するトグルボタンを配置したフォームおよびそのプログラム例を紹介します。


まず、下図のようなフォームを作成します。


ここで、各コントロール名や、トグルボタンの「オプション値」プロパティは下表のようになっているとします。
コントロールの種類 コントロール名 標題 オプション値
オプショングループ fra抽出商品区分
トグルボタン 任意 すべて 1
トグルボタン 任意 A区分 2
トグルボタン 任意 B区分 3
トグルボタン 任意 C区分 4
トグルボタン 任意 D区分 5
サブフォーム frm商品マスタ区分別_sub

ここでは、オプショングループ「fra抽出商品区分」で選択されたトグルボタンが切り替わった時、サブフォームの全レコードの中から当該商品区分だけを抽出するものとします。そして[すべて]で抽出解除するものとします。

「fra抽出商品区分」の中のトグルボタンが切り替わると「AfterUpdate/更新後処理」イベントが発生しますので、そのイベントプロシージャに下記のようなコードを記述します。

Private Sub fra抽出商品区分_AfterUpdate()
'[商品区分で抽出]オプショングループの更新後処理

  Dim strKubun As String

  'オプション値から抽出条件を設定
  strKubun = Choose(Me!fra抽出商品区分, "", "A区分", "B区分", "C区分", "D区分")

  'サブフォームのフィルタを設定
  With Me!frm商品マスタ区分別_sub.Form
    If strKubun <> "" Then
      '商品区分でフィルタを掛ける
      .Filter = "商品区分 = '" & strKubun & "'"
      .FilterOn = True
    Else
      'フィルタを解除する
      .Filter = ""
      .FilterOn = False
    End If
  End With

End Sub


[すべて]のトグルボタンが選択されると、「fra抽出商品区分」の値はそのオプション値である「1」となります。よってここでは『それが1のときは変数strKubunを””とし、かつその場合はサブフォームの「FilterOn」プロパティを「False」とする』ことでFilterを解除、すわなち抽出を解除して全レコード表示を行っています。

また、フォームにフィルタを掛ける「Filter」や「FilterOn」などのプロパティは、”サブフォームコントロール”のプロパティではなく、”サブフォームコントロールのソースオブジェクトとなっているフォーム”のプロパティです。よって「Me!frm商品マスタ区分別_sub.Form」のように、サブフォームコントロール名の最後に「.Form」を付けることに注意してください。

なお、「.Filter = ""」という命令は必須ではありません。ただ、「この画面で抽出されたデータだけを印刷したい」といったようなとき、サブフォームの「Filter」プロパティ値をレポートに渡して処理するといったこともありますので、念のためクリアしておくものとしています。


実行例:
  • [A区分]を選択したとき

  • [C区分]を選択したとき

  • [すべて]を選択したとき
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved