2017-10-02 2 views
0

J'essaie de créer un bouton de recherche qui affichera les informations sur la zone de liste. Les données que j'essaie de rechercher sont par nom et par période. ou il peut aussi par nom ou par date seulement. J'ai déjà un code mais il semble qu'il y ait quelque chose qui ne va pas, parce que chaque fois que j'ai essayé de chercher, il affiche tout le nom mais la date est correcte.Recherche par zone de texte et affichage dans la zone de liste

est Ci-dessous le code:

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

Vous avez votre condition 'Si rCl.Value> = Date1 Et rCl.Value <= Date2 Et Dn.Value = strName Puis' et ne pas faire les actions, et quand le nom correspond vous ajoutez les oses, de sorte que vous Ajoutez tout. Vous devez supprimer cette ligne 'ElseIf Dn.Value = strName Then' – danieltakeshi

+0

Salut, j'ai déjà essayé de supprimer l'instruction ElseIf Dn.Value = strName Ensuite - il affiche toujours tout et puis par exemple je ne fais que filtrer en utilisant le nom Je reçois une erreur pour le cdate car il n'y a pas de valeur. –

+0

Vous parcourez deux fois la même plage 'For Each Dn In rng.Cells' et' Pour chaque rCl In DateRange.Cells' car DataRange et rng sont les mêmes. Bien que cela ne résoudra pas le problème. – danieltakeshi

Répondre

0

En supposant que vous vérifiez la plage de dates que dans la même ligne: Supprimer la deuxième boucle For Each Dn in rng.Cells ainsi que Next Dn) et remplacer la condition suivante avec:

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

BTW, c'est la meilleure méthode pour utiliser des tableaux que les boucles de gamme.

+0

Salut, je vais essayer cela. Désolé pour la réponse tardive. –