#431 画面でフィルタリングされたデータを走査する方法 フォーム、VBA

Accessの機能の1つとして、画面上に表示されたデータにフィルタを掛けることができます。しかしユーザーがフィルタを掛けた場合、画面上に表示されているレコードと、そのフォームのレコードソースとなっているテーブルやクエリのレコードとは異なるものとなってしまいます。
そうようなとき、VBAでフォームのRecordsetCloneオブジェクトを扱うことによって、フィルタリングされたデータ、すなわち画面上に実際に表示されているレコードだけを走査することができます。

次のサンプルコードでは、画面上に表示されているレコードを先頭から順番に走査し、その内容をイミディエイトウィンドウに出力しています。レコードセットを開いたりレコード移動したりするプログラムは通常のRecordsetオブジェクトを扱う場合と同じです。留意点として、RecordsetCloneの場合は、開いた直後に必ずしもカレントレコードが先頭にあるとは限りませんので、あらかじめMoveFirstメソッドによって先頭に戻しておくようにします。

Private Sub cmdデータ取得_Click()
'[データ取得]ボタンクリック時

  Dim rst As Recordset

  Set rst = Me.RecordsetClone
  With rst
    .MoveFirst
    Do Until .EOF
      Debug.Print !商品コード, !商品名
      .MoveNext
    Loop
    .Close
  End With

End Sub


  1. 開いた直後の全件表示された画面


  2. フォームの操作によってフィルタを掛けます


  3. そのあとボタンをクリックしてRecordsetCloneを処理します。
※RecordsetCloneはいわば画面上のレコードの"写し"です。一方、フォームにはRecordsetというオブジェクトもありますが、こちらは画面上のレコードそのものです。Recordsetでも画面表示されているレコードを扱うことができますが、VBA上でレコード移動すると画面上のカレントレコード(カーソル)もそのレコードに移動してしまうので、今回のようなケースでは使わない方がよいでしょう。
| Index | Prev | Next |



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