これを行うコードは次のとおりですが、キャッチがあります。
Private Sub Command1_Click()
Dim i As Long
Dim RS As Recordset
Dim F As Form
Set F = Me.sf.Form
Set RS = F.RecordsetClone
If F.SelHeight = 0 Then Exit Sub
' Move to the first selected record.
RS.Move F.SelTop - 1
For i = 1 To F.SelHeight
MsgBox RS![myfield]
RS.MoveNext
Next i
End Sub
問題は次のとおりです。
コードがボタンに追加された場合、ユーザーがそのボタンをクリックするとすぐに、グリッドで選択が失われます (selheight はゼロになります)。したがって、その情報をキャプチャし、タイマーまたはフォーム上の他のイベントを使用して、モジュール レベルの変数に保存する必要があります。
これは、キャッチを回避する方法を詳細に説明する記事です。
http://www.mvps.org/access/forms/frm0033.htm
キャッチ 2:これは、連続した選択でのみ機能します。グリッド内の複数の連続していない行を選択することはできません。
更新:
これをトラップするためのより良いイベントがあるかもしれませんが、これは私がテストした form.timerinterval プロパティを使用した実用的な実装です (少なくとも Access 2k3 では、2k7 は問題なく動作するはずです)。
このコードは SUBFORM に入り、プロパティを使用してマスター フォームの selheight 値を取得します。
Public m_save_selheight As Integer
Public Property Get save_selheight() As Integer
save_selheight = m_save_selheight
End Property
Private Sub Form_Open(Cancel As Integer)
Me.TimerInterval = 500
End Sub
Private Sub Form_Timer()
m_save_selheight = Me.selheight
End Sub