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
- 開いた直後の全件表示された画面

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

- そのあとボタンをクリックしてRecordsetCloneを処理します。
|