2017-10-02 3 views
0

목록 상자에 정보를 표시 할 검색 단추를 만들려고합니다. 내가 검색하려고하는 데이터는 이름과 날짜 범위입니다. 또는 이름 또는 날짜에 의해서만 가능합니다. 나는 이미 코드를 가지고 있지만 잘못된 검색이 시도 될 때마다 모든 이름을 표시하지만 날짜가 정확하기 때문에 잘못된 것이있는 것으로 보입니다.텍스트 상자와 목록 상자로 검색

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 
+0

만약'If rCl.Value> = Date1 그리고 rCl.Value <= Date2 그리고 Dn.Value = strName Then'당신의 조건을 가지고 행동을하지 않고 이름이 일치하면 itens를 추가합니다. ElseIf Dn.Value = strName Then' – danieltakeshi

+0

안녕하세요, 이미 ElseIf Dn.Value = strName 문을 삭제하려고했습니다. 그렇다면 여전히 모든 것을 표시하고 예를 들어 나는 이름 가치가 없기 때문에 cdate에 오류가 발생합니다. –

+0

DataRange와 rng가 동일하기 때문에 'For Each Dn In rng.Cells' 및'For Each rCl In DateRange.Cells '두 번 동일한 루핑을 반복합니다. 그것은 문제를 해결할 수는 없지만. – danieltakeshi

답변

0

만 같은 줄에 날짜 범위를 확인하는 것을 가정 : 다음

는 코드뿐만 아니라 Next Dn와 두 번째 루프 For Each Dn in rng.Cells 삭제)와 함께 다음과 같은 조건을 대체 :

 If (rCl.Value >= Date1 And rCl.Value <= Date2) And rCl.Offset(0, -3).Value = strName Then 

둘째, 배열을 범위 루프보다 사용하는 것이 좋습니다.

+0

안녕하세요, 저는 이것을 시도 할 것입니다. 답장을 늦게 보내서 미안해. –