我有一个访问2007表格,显示40行。当我打开它时,我希望当前记录的行在显示的40行中显示在第5行#5。换句话说,当前行上方应该有4行,下方应有35行。
moveupdown 是我第一次剪辑,但是目前仅在当前记录的行(如 findfirst 移动到 findfirst )时起作用,最初在行位置#显示1至5。我如何找到相对于显示的行的当前行显示的位置是什么,以及如何更改它?谢谢。
Private Sub OpenMyFormTo(sqlWhere As String)
Dim rs As DAO.Recordset, frm As Form
DoCmd.Openform "myForm", acNormal
Set frm = Forms("myForm").Form
Set rs = frm.RecordsetClone
If Not (rs.BOF And rs.EOF) Then
rs.MoveFirst
rs.FindFirst sqlWhere
frm.Bookmark = rs.Bookmark
MoveUpDown frm.Recordset, 5
End If
End Sub
Private Sub MoveUpDown(rs As DAO.Recordset, RowsToMove As Integer)
Dim RowsActuallyMoved As Integer, i As Integer
RowsActuallyMoved = 0
For i = 1 To RowsToMove
If Not rs.BOF Then
rs.MovePrevious
RowsActuallyMoved = RowsActuallyMoved + 1
End If
Next i
For i = 1 To RowsActuallyMoved
If Not rs.EOF Then rs.MoveNext
Next i
End Sub
我不确定这是否需要:
a)要直接转到第五记录,请使用: DoCmd.GoToRecord acDataForm, Me.Name, acGoTo, 5
(Me.Name仅在代码在表单自己的代码模块中时)
b)您可以用 Me.Recordset.AbsolutePosition
奇怪的是,.absoluteposition开始计数为0,goto-command in1。
我相信我有一个答案,尽管对我来说似乎很笨拙。此过程找到目标行,向下滚动,直到目标行不可见,滚动回到目标行,将目标超过(偏移)其他行,然后向下滚动回到目标行。结果是目标行显示为(偏移 1)可见行。如果行的数量<偏移,然后将其显示为最后一行。
Private Sub DisplayWithOffset(frm As Form, sqlWhere as String, Offset As Integer)
Dim rs As DAO.Recordset, DetailsHt As Long, RowHt As Long, i As Integer
Dim RowsVisible As Integer, BookmarkAP As Integer, RowsMoved As Integer
DetailsHt = frm.InsideHeight _
- frm.Section(acHeader).Height - frm.Section(acFooter).Height
RowHt = frm.Section(acDetail).Height
RowsVisible = IIf(RowHt > 0, DetailsHt Mod RowHt, 0)
Set rs = frm.Recordset
If Not (rs.BOF And rs.EOF) Then
rs.MoveLast
rs.FindFirst sqlWhere
BookmarkAP = rs.AbsolutePosition
RowsMoved = 0
For i = 1 To RowsVisible
If rs.AbsolutePosition + 1 < rs.RecordCount Then
rs.MoveNext
RowsMoved = RowsMoved + 1
End If
Next i
Do Until rs.AbsolutePosition = BookmarkAP
rs.MovePrevious
Loop
RowsMoved = 0
For i = 1 To Offset
If rs.AbsolutePosition > 0 Then
rs.MovePrevious
RowsMoved = RowsMoved + 1
End If
Next i
For i = 1 To RowsMoved
rs.MoveNext
Next i
End If
End Sub