Form.Seltop没有选择最顶级的记录

时间:2017-03-14 12:11:18

标签: ms-access access-vba

此问题的后续问题:Moving records from one table to another

我有一个附加到表单的子表单。在突出显示表单并单击其他内容(退出)时,它会通过文本框控件将突出显示的行数发送到主表单。

Set frm = Forms!Form.[subform_subform].Form
Set rst = frm.RecordsetClone

recordStart = frm.SelTop - 1
recordEnd = recordStart + Me.SH - 1

Debug.Print Me.SH
Debug.Print recordStart
Debug.Print recordEnd

其中Me.SH是所选行数。 (使用http://www.tek-tips.com/viewthread.cfm?qid=1499722

从上到下选择行时,我得到recordStart我选择的顶行的输出。但是当我从下到上选择行时,我会获得recordStart的最后一行。有办法防止这种情况吗?上面的第二个链接(以及https://msdn.microsoft.com/en-us/library/office/ff194148.aspx)意味着不应该发生这种情况。有解决方法吗?

3 个答案:

答案 0 :(得分:0)

是你标记记录“开始”和“结束”。

要访问,无论用户(或您的代码)如何选择记录,都会选择“最高”记录和所选记录的“高度”(计数)。

如果您希望选择不同的记录序列,请先应用所需的排序,然后选择记录。

答案 1 :(得分:0)

我相信我已经弄明白了,我相信这是选择形式的结果:退出时,.SelHeight之类的参数会像预期的那样丢失。但是,.SelTop的工作方式不同。

在数据表视图中说[Subform][Subform][Form]

Set frm = Forms![Form].[Subform].Form
Debug.Print frm.SelTop

如果您要从上到下选择记录,那么frm.SelTop显然是您首次选择的表单。

但如果您要从下到上进行选择,那么frm.SelTop将是您的底行,因为它是第一个选定的行。

也就是说,无论您点击的是什么,都会frm.SelTop,因为无论出于什么原因,Access都会将其作为frm.SelTop传递。

除了使用一堆公共变量(Moving records from one table to another)之外,解决此问题的一种方法是为.SelTop创建文本框控件,并将.SelTop值传递给文本框控件。

答案 2 :(得分:0)

我理解你的问题: 您想使用selTop和SelHeight来引用访问表单上的选择。 但是selTop并没有返回选择的第一行,而是选择时单击的第一行 例如,如果您从上到下选择第三行和第四行,则得到:selTop = 3,selHeight = 2 但是如果你从下到上选择你得到selTop = 4和SelHeigh = 2

另外,您知道通常单击按钮时选择会丢失,因此必须保存。我想这就是“Me.SH”的意思,因为在按钮点击事件中访问时selHeight总是为零。您可能已将值保存在SubForm_Exit事件

解决方案是您必须同时保存selTop和SelHeigh:

Private Sub MySubForm_Exit(Cancel As Integer)

  With MySubForm.Form
    SH = .SelHeight
    TOP = .SelTop
  End With

End Sub

不这样做,清除选择并将selTop设置为当前所选记录,这是最低记录(当你自下而上选择时)