帳票形式・データシート形式のフォームで、連続した複数のレコードを選択
した場合のフィールドの値を取得する方法を説明します。
● 準備 ●
(1) テーブル[テーブル1]を用意し、以下のようなサンプルデータを入力します。
名前(テキスト型)
A
B
C
D
(2) オートフォーム、フォームウィザードで[テーブル1]をレコードソースにし
たデータシート形式のフォーム[フォーム1]を作成します。
その際、必ずレコードセレクタを [はい] にしておいて下さい。
(3) フォームのCurrent/レコード移動時イベントに、以下のプロシージャを記
述します。
● サンプル ●
'フォーム移動時のイベント
Private Sub Form_Current()
Dim Frm As Form
Dim rsClone As DAO.Recordset
Dim iTop As Integer
Dim iRecNum As Integer
Dim iLoop As Integer
'オブジェクト変数に使用フォームを代入
Set Frm = Me
'レコードセット作成
Set rsClone = Me.RecordsetClone
rsClone.MoveFirst
'複数選択されたレコードの先頭レコード位置とレコード数を取得
iTop = Frm.SelTop
iRecNum = Frm.SelHeight
'行を選択していない場合と新規レコードの場合は処理中止
If iRecNum = 0 Or Me.NewRecord = True Then
Exit Sub
End If
'先頭レコードに移動
rsClone.Move iTop - 1
'必要なフィールドをメッセージボックスで表示
For iTop = 1 To iRecNum
MsgBox rsClone![名前]
rsClone.MoveNext
Next
'強制的に新規レコードに移動
DoCmd.GoToRecord acDataForm, "フォーム1", acNewRec
'終了処理
rsClone.Close
Set rsClone = Nothing
End Sub
● 動作確認 ●
フォームをデータシートビューに変更し、任意のレコードセレクタからマウ
スをドラッグして複数レコードを選択します。
すると、選択したレコードの名前フィールドの値が、順に表示されます。
● 詳細 ●
サンプルではSelTopプロパティで選択された複数のレコードの先頭位置を取
得し、SelHeightプロパティで選択されたレコード数を取得しています。
そこで取得した情報を元に、レコードセットクローンのカレント位置を移動
させています。
その時、SelTopプロパティが1から始まるのに対し、レコードセットのレコー
ド番号は0から始まりますので、変換に際しては注意が必要です。
また、フォームのCurrent/レコード移動時イベントを使用しているため、す
でにフォーカスがあるレコードを基点に選択した場合、イベントが発生しない
ため、最後に強制的に値取得後に新規レコードにカーソルを移動しています。
● 補足説明 ●
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、
Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOの
チェックを持ってきて下さい。
|