kar*_*ins 8 ms-access vba selection
我有一个包含数据表的表格.我想让用户可以选择多行,单击一个按钮并运行一些SQL查询并对这些行执行一些工作.
查看我的VBA代码,我看到如何使用CurrentRecord属性访问最后选择的记录.但我不知道如何知道在多个选择中选择了哪些行.(我希望我很清楚......)
这样做的标准方法是什么?访问VBA文档在网上有点模糊......
谢谢!
我使用了类似于JohnFx的技术
要在选择高度消失之前捕获它,我在Main表单中使用了子窗体控件的Exit事件.
所以在主要形式:
Private Sub MySubForm_Exit(Cancel As Integer)
With MySubForm.Form
m_SelNumRecs = .SelHeight
m_SelTopRec = .SelTop
m_CurrentRec = .CurrentRecord
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
这是执行此操作的代码,但有一个问题.
Private Sub Command1_Click()
Dim i As Long
Dim RS As Recordset
Dim F As Form
Set F = Me.sf.Form
Set RS = F.RecordsetClone
If F.SelHeight = 0 Then Exit Sub
' Move to the first selected record.
RS.Move F.SelTop - 1
For i = 1 To F.SelHeight
MsgBox RS![myfield]
RS.MoveNext
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
这里有一个问题: 如果代码被添加到按钮中,只要用户单击该按钮,选择就会在网格中丢失(selheight将为零).因此,您需要捕获该信息并使用计时器或表单上的其他事件将其保存到模块级变量.
这篇文章描述了如何详细解决这个问题.
http://www.mvps.org/access/forms/frm0033.htm
捕获2:这仅适用于连续选择.他们无法在网格中选择多个非连续行.
更新:
可能有一个更好的事件来捕获它,但这是一个使用我测试的form.timerinterval属性的工作实现(至少在Access 2k3,但2k7应该工作正常)
此代码在SUBFORM中,使用该属性获取主表单中的selheight值.
Public m_save_selheight As Integer
Public Property Get save_selheight() As Integer
save_selheight = m_save_selheight
End Property
Private Sub Form_Open(Cancel As Integer)
Me.TimerInterval = 500
End Sub
Private Sub Form_Timer()
m_save_selheight = Me.selheight
End Sub
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47466 次 |
最近记录: |