将Access ListBox传递给函数不会保留值

时间:2016-01-04 18:55:05

标签: vba ms-access access-vba ms-access-2007

我有一个未绑定的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  

0 个答案:

没有答案