如果组合框值为“样本”,则搜索与“样本”匹配的列

时间:2018-08-13 12:16:40

标签: vba ms-access

我正在尝试创建搜索功能,该功能使用户可以从组合框中选择所需的列值(例如,名称),键入他们要搜索的内容(例如Alex),然后按搜索按钮,程序将选择“名称”列中所有具有“ Alex”的行。

到目前为止,这是我的工作,With部分可以在没有If语句的情况下工作,所以我想我在那儿做错了。最初将lngColumn和lngRow设置为Long,但是它给我无效使用了null错误,因此我将它们更改为Variant。

Private Sub cmdSearch_Click()
Dim strSearch As Variant, lngColumn As Variant, lngRow As Variant
Dim strValue As String
strSearch = Me.txtSearch
strValue = Me.cboSearch

If strValue = "Name" Then
    lngColumn = Me.lstTest.Column(1)
ElseIf strValue = "Occupation" Then
    lngColumn = Me.lstTest.Column(2)
ElseIf strValue = "Location" Then
    lngColumn = Me.lstTest.Column(3)
    With Me.lstTestReports
        For lngRow = 0 To .ListCount - 1
            If (.Column(lngColumn, lngRow)) = strSearch Then
                .Selected(lngRow) = True
            Else
                .Selected(lngRow) = False
            End If
        Next
    End With
End If

结束子

1 个答案:

答案 0 :(得分:2)

您对lngColumn As Long是正确的-您将其用于

.Column(lngColumn, lngRow)

稍后,因此您不必存储列表框值,而可以存储列号。

此外,With Me.lstTestReports部分属于If之外。

Private Sub cmdSearch_Click()
Dim strSearch As Variant, lngColumn As Long, lngRow As Long
Dim strValue As String
strSearch = Me.txtSearch
strValue = Me.cboSearch

If strValue = "Name" Then
    lngColumn = 1
ElseIf strValue = "Occupation" Then
    lngColumn = 2
ElseIf strValue = "Location" Then
    lngColumn = 3
End If

With Me.lstTestReports
    For lngRow = 0 To .ListCount - 1
        If (.Column(lngColumn, lngRow)) = strSearch Then
            .Selected(lngRow) = True
        Else
            .Selected(lngRow) = False
        End If
    Next
End With