我正在尝试创建搜索功能,该功能使用户可以从组合框中选择所需的列值(例如,名称),键入他们要搜索的内容(例如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
结束子
答案 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