按文本框搜索并在列表框中显示

时间:2017-10-02 07:20:26

标签: excel vba filter listbox userform

我正在尝试创建一个将在列表框中显示信息的搜索。

我正在尝试按名称和日期范围,或按名称或按日期进行搜索。

我有代码,日期正确但显示所有名称。

Private Sub cmdFind_Click() 

    Dim DateRange As Range, rCl As Range, rng As Range, Dn As Range 
    Dim Date1 As Date, Date2 As Date 
    Dim iX As Integer 
    Dim strName As String 

    Set DateRange = Sheet2.Range("A1").CurrentRegion.Columns(4) 
    Set rng = Sheet2.Range("A1").CurrentRegion.Columns(4) 
    Me.ListBox1.Clear 

    strName = Me.txtName.Text 
    Date1 = CDate(Me.txtDate.Value) 
    Date2 = CDate(Me.EndDate.Value) 

    For Each rCl In DateRange.Cells 
        For Each Dn In rng.Cells 
            If rCl.Value >= Date1 And rCl.Value <= Date2 And strName Then

            ElseIf Dn.Value = strName Then 

                With Me.ListBox1 
                    .AddItem Sheet2.Cells(rCl.Row, 1) 
                    .List(.ListCount - 1, 1) = Sheet2.Cells(rCl.Row, 2) 
                    .List(.ListCount - 1, 2) = Sheet2.Cells(rCl.Row, 3) 
                    .List(.ListCount - 1, 3) = Sheet2.Cells(rCl.Row, 4) 
                    .List(.ListCount - 1, 4) = Sheet2.Cells(rCl.Row, 5) 
                    .List(.ListCount - 1, 5) = Format(Sheet2.Cells(rCl.Row, 6), "hh:mm:ss") 
                End With 
            End If 
        Next Dn 
    Next rCl 
End Sub

1 个答案:

答案 0 :(得分:0)

假设您仅在同一行中检查日期范围:删除第二个循环For Each Dn in rng.Cells以及Next Dn)并将以下条件替换为:

        If (rCl.Value >= Date1 And rCl.Value <= Date2) And rCl.Offset(0, -3).Value = strName Then
顺便说一下,使用数组比使用范围循环更好。