下一个按钮,在“访问表单”上循环回到第一个

问题描述 投票:1回答:1

我一直在尝试创建一个按钮,导航回到最后一条记录的第一条记录。我得到“无法转到指定记录”错误。以下是我为此按钮尝试的两种代码样式:

Private Sub Command161_Click()
    On Error Resume Next
    If Me.CurrentRecord = acLast Then
            DoCmd.GoToRecord , , acFirst
        Else
            DoCmd.GoToRecord , , acNext
       End If

End Sub

Private Sub Command161_Click()
With Me.Recordset
  If .AbsolutePosition = .RecordCount - 1 Then
      DoCmd.GoToRecord , , acFirst
  Else
    DoCmd.GoToRecord , , acNext
  End If
End With

End Sub

目标是循环回到第一条记录,而不允许用户创建新记录。我尝试过这个代码,将“allow additions”设置为yes和now,结果相同。任何帮助,将不胜感激。

ms-access access-vba
1个回答
0
投票

我建议在表单模块中定义一个私有谓词函数,它返回一个布尔值,具体取决于活动表单是否在其记录源中显示最后一条记录。

这样的功能可能写成:

Private Function LastRecordP() As Boolean
    With Me.RecordsetClone
        If Not .EOF Then
            .MoveLast
            .MoveFirst
            LastRecordP = Me.CurrentRecord = .RecordCount
        End If
    End With
End Function

然后,您的按钮控件的OnClick事件处理程序可以更简洁地编写为:

Private Sub Command161_Click()
    If LastRecordP Then
        DoCmd.GoToRecord , , acFirst
    Else
        DoCmd.GoToRecord , , acNext
    End If
End Sub

或者,您可以允许函数接受Form对象作为参数,并使用Me关键字评估此类函数,例如:

Private Function LastRecordP(Frm As Form) As Boolean
    With Frm.RecordsetClone
        If Not .EOF Then
            .MoveLast
            .MoveFirst
            LastRecordP = Frm.CurrentRecord = .RecordCount
        End If
    End With
End Function
Private Sub Command20_Click()
    If LastRecordP(Me) Then
        DoCmd.GoToRecord , , acFirst
    Else
        DoCmd.GoToRecord , , acNext
    End If
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.