我猜 Me.Key 是指位于表单详细信息部分的控件。在这种情况下,为了列出控件采用的所有值,您需要浏览所有记录。这样做的方法之一可以是:
Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
me.seltop = m_position
debug.print me.key
next m_position
不幸的是,您在浏览所有行时会看到屏幕闪烁。您当然可以在网上找到一些用于 VBA 的“screenFreezer”实用程序(只要我记得,就有一个称为 LockWindowUpdate)。
另一种解决方案是浏览底层记录集的克隆(浏览记录集将引发与以前相同的屏幕行为)。假设 Me.Key 控件绑定到记录集的“Key”列,代码可以是:
Dim rsClone as DAO.recordset
set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
rsClone.moveFirst
Do while not rsClone.EOF
debug.print rsCLone.fields("Key")
rsClone.moveNext
Loop
Endif
set rsClone = nothing
我最喜欢的是第一个,添加了“冻结”选项。您的代码可以管理表单的 seltop 和 selheight 值。这意味着您可以浏览用户选择的特定记录和/或在浏览完所有记录后返回到原始记录选择。
编辑:
在@Ben 的评论之后,我将补充一点,如果您的“myControl”控件位于详细信息部分并且未绑定,那么您将无法管理每行一个值。当窗体显示为“连续”时,控件的所有行将具有相同的值。
如果您的“myControl”控件绑定到记录集的“myField”字段,则以下任何代码都将同时增加“myControl”控件值和“myField”字段值。您将能够在每一行上拥有不同的值:
解决方案1:
Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
me.seltop = m_position
me.controls("myControl") = m_position
next m_position
解决方案2:
Dim rsClone as DAO.recordset, _
i as long
set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
rsClone.moveFirst
i = 1
Do while not rsClone.EOF
rsClone.fields("myField") = i
rsClone.update
rsClone.moveNext
i = i+1
Loop
Endif
set rsClone = nothing