まず、(既にご存知のことかも知れませんが、)レコードが10件表示できるサイズのサブフォームをメインフォームに配置すれば、レコードを10件づつ表示させることができます。
さて次に、11、21、31などのレコードを一番上に表示させる方法ですが、
(少々裏技っぽいですが、)レコードを一旦「表示させる件数+1」(ご質問の場合は11ですね)先に移動してから、一番上に表示させたいレコード(11とか21)まで戻してやればできます。
例えば現在のレコードが15なら、26まで移動して5(11まで)戻す、20なら、31まで移動して10(21まで)戻す、といった要領です。
具体的には、(次の10件に進む場合)以下のようなコードになります。
Private Sub 次の10件コマンド_Click()
Dim formSub As Form, CurRec As Long, PrevNum As Long, RecNum As Long, TempPrev As Long
'サブフォームのフォームオブジェクトを取得
Set formSub = Me.サブフォームのコントロール名.Form
'サブフォームのカレントレコードを取得
CurRec = formSub.CurrentRecord
'レコードの総数を取得
RecNum = formSub.RecordsetClone.RecordCount
'レコードを行ったり来たりすることによる画面のチラツキをなくす
Application.Echo False
'サブフォームにフォーカスを移動
Me!サブフォームのコントロール名.SetFocus
'レコードを11移動できない(レコード総数を超えてしまう)場合の処理
If CurRec + 11 > RecNum Then
'いくつ超えてしまうかを取得
TempPrev = CurRec + 11 - RecNum
'超えてしまう分だけ、一旦前のレコードに戻る
DoCmd.GoToRecord , , acPrevious, TempPrev
CurRec = CurRec - TempPrev
End If
'カレントレコードの1の位の値を取得
PrevNum = CurRec Mod 10
'もし1の位が0なら、レコードを前に戻る値を10にする
If PrevNum = 0 Then
PrevNum = 10
End If
'レコードを11前方へ移動
DoCmd.GoToRecord , , acNext, 11
'一番上に表示させたいレコードへ戻る
DoCmd.GoToRecord , , acPrevious, PrevNum
'画面表示を元に戻す
Application.Echo True
End Sub
前の10件に戻す場合は難しく考えないでも、以下のコードでよいでしょうか?
Private Sub 前の10コマンド_Click()
Dim formSub As Form, CurRec As Long, PrevNum As Long
Set formSub = Me.サブフォームのコントロール名.Form
CurRec = formSub.CurrentRecord
Me!サブフォームのコントロール名.SetFocus
PrevNum = CurRec Mod 10 + 9
If CurRec < 10 Then
DoCmd.GoToRecord , , acFirst
Else
DoCmd.GoToRecord , , acPrevious, PrevNum
End If
End Sub
(今私が使っているのは Access97 ですが、)こんな方法で経験がありますので、ベストな方法かはわかりませんが、一応「自信あり」とさせていただきます。
お礼
ご回答ありがとうございます! 教えて頂いたコードでバッチリ要求通りの動きになりました!! 本当にありがとうございます。身の回りに知識を持つ者がいないので、こうした場でご教授頂ける事に感謝しております。また機会がありましたら、お手数ですが宜しくお願いします。