我有一个未绑定的MS Access列表框,我需要以编程方式访问。 给定一个Permit List,其值与表中的OperationID = 8的所有值直接对应:
Permit# OperationID 20012 8 34411 8 52522 8
事件处理程序:
Sub DoThis_OnClick()
FindSetListBox(Me.list_Permit, 8)
End Sub
我创建了这个通用函数,允许我访问列表框的值:
'FindNSetListBox takes a listbox as an access control and finds the given value to programmatically select the value
'Params:
'@lstBox takes MS Access type control
'@val takes the value to search for
'Return: Boolean indicating if access found the values or not
Private Function FindNSetListBox(lstBox As Control, val As Variant) As Boolean
Debug.Print lstBox.RowSource
Dim i As Integer
For i = 0 To lstBox.ListCount - 1
Debug.Print lstBox.Column(0, i)
If (lstBox.Column(0, i)) = val Then
lstBox.Selected(i) = True
End If
FindNSetListBox = True
Next i
End Function
立即窗口
SELECT * FROM PERMIT WHERE OperationID = 8 10001 ... (ALL Permits) 99999
如果我按控件名称访问“允许列表”,它将只打印表单中显示的确切值,但是将其作为控件传递似乎不会保留值,并且它会打印表的所有值,尽管.RowSource属性被设置 为什么是这样?是否有使用此通用功能的解决方法?循环遍历表中的所有值并不理想,超过10K允许迭代。
更多说明:
以下代码按预期执行,并且没有松散值
Sub DoThisNonGeneric_OnClick()
Dim i As Integer
Debug.Print list_Permit.RowSource
For i=0 to list_Permit.ListCount - 1
If(list_Permit.Column(0, i) = 8 Then
Debug.Print(list_Permit.Column(0,i)
list_Permit.Selected(i) = True
End If
Next i
End Sub
立即窗口:
SELECT * FROM PERMIT WHERE OperationID = 8 20012 34411 52522