此问题的后续问题: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)意味着不应该发生这种情况。有解决方法吗?
答案 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设置为当前所选记录,这是最低记录(当你自下而上选择时)