Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 返回到上一条记录的int数组_Vba_Ms Access - Fatal编程技术网

Vba 返回到上一条记录的int数组

Vba 返回到上一条记录的int数组,vba,ms-access,Vba,Ms Access,我有一个标准表单,它显示基于partID的信息。该表单有一个子表单,显示零件的辅助工具,双击该子表单将带您找到该零件号(下面的代码段)。var_lastPartID是一个记录当前ID的全局长变量,因此按下返回按钮将返回到上一条记录。但是,由于一次只能存储1个值,因此我认为最好的方法是存储long/int数组,双击后存储当前ID。单击“返回”时,它将获取最后添加的值并将您带到该记录,然后删除该记录,以便下次单击“返回”时将您带到下一条记录。然而,我使用VBA的经验非常有限,我以前从未使用过它们。请

我有一个标准表单,它显示基于partID的信息。该表单有一个子表单,显示零件的辅助工具,双击该子表单将带您找到该零件号(下面的代码段)。var_lastPartID是一个记录当前ID的全局长变量,因此按下返回按钮将返回到上一条记录。但是,由于一次只能存储1个值,因此我认为最好的方法是存储long/int数组,双击后存储当前ID。单击“返回”时,它将获取最后添加的值并将您带到该记录,然后删除该记录,以便下次单击“返回”时将您带到下一条记录。然而,我使用VBA的经验非常有限,我以前从未使用过它们。请有人解释一下我是如何做到这一点的

Private Sub childPart_DblClick(Cancel As Integer)
    var_lastPartID = Forms![Part]![part_ID].Value
    Forms("Part").Recordset.FindFirst ("part_ID = " & childPart)
End Sub

好的,你有一个父窗体,然后是一个子窗体

单击子窗体中的一行。您希望父窗体跳转到此记录。但由于您可能会多次这样做,因此您需要在主窗体上显示某种“后退”或“上一步”按钮。当您单击此后退按钮时,您希望跳转的上一个ID出现

好的,驱动它的方法是什么,并且有一组下一个/上一个按钮来遍历您查看、处理和单击的记录

好的,在主窗体中,在代码模块级别,创建一个指针、一个集合和一个例程,如下所示:

  Option Compare Database
  Option Explicit

  Dim intListPosition     As Integer
  Dim colRecords          As New Collection


  Public Sub AddAndJump(MyID As Long)

     ' add this new ID to the list
     intListPosition = intListPosition + 1

     colRecords.Add MyID, CStr(intListPosition)

     ' now jump (move) to this record
     Me.Recordset.FindFirst "ID = " & MyID

  End Sub


  Public Sub BackOne()

     ' call this code from your back buttion
     ' go to previous record

     If intListPosition > 1 Then
        intListPosition = intListPosition - 1
        Me.Recordset.FindFirst "ID = " & colRecords.Item(CStr(intListPosition))
     End If

  End Sub


  Public Sub ForwardOne()
     'call this code from your forward buttion
     If intListPosition < colRecords.Count Then
        intListPosition = intListPosition + 1
        Me.Recordset.FindFirst "ID = " & colRecords.Item(CStr(intListPosition))
     End If

  End Sub

  Private Sub cmdBack_Click()

     BackOne

  End Sub

  Private Sub cmdNext_Click()

     ForwardOne

  End Sub

因此,上面的内容现在允许在顶部表单上单击下一步/上一步按钮,当您单击并从下部表单(子表单)中选择项目时,将建立“id”列表,下一步/上一步按钮将起作用。

我不确定是否理解您的问题。我认为您要求存储X个以前的记录(使用零件ID),以便用户可以返回到(可能最多X个)以前的记录。这是正确的吗?如果是这样,那么我建议使用创建后进先出堆栈,并使用该堆栈跟踪您以前的零件ID列表。
Call Me.Parent.AddAndJump(Me.ID)