如何结合两个搜索框的调查?

时间:2019-06-05 08:33:36

标签: excel vba search

我有一个工作人员列表和一个用户表单,可以使用几个字段搜索此列表。

Matric Apellido Nombre Avión
12     Burrow   Irving F15     
42     Nelson   Howard A10
18     Krings   Jack   F18   

如何结合对两个(或更多)搜索框的调查?

我尝试了以下代码,对此感到满意。     选项比较文字

' Méthode qui se déclanche lorsqu'on écris dans le champ du prénom
Private Sub name_reservist_Change()
    ListBoxResults.Clear
    If name_reservist <> "" Then searchresults
End Sub

' Méthode qui se déclanche lorsqu'on écris dans le champ du nom de famille
Private Sub surname_reservist_Change() 'www.blog-excel.com/creer-un-champ-de-recherche-vba
    ListBoxResults.Clear
    If surname_reservist <> "" Then searchresults
End Sub

' Méthode qui aggrège les résultats des recherches
Sub searchresults()
    ListBoxResults.Clear
    For ligne = 2 To Sheets("RECAP").Range("C1").End(xlDown).Row
        If Sheets("RECAP").Cells(ligne, 4) Like "*" & name_reservist & "*" And Sheets("RECAP").Cells(ligne, 3) Like "*" & surname_reservist & "*" Then
            ListBoxResults.AddItem Sheets("RECAP").Cells(ligne, 3) & " " & Sheets("RECAP").Cells(ligne, 4)
        End If
    Next
End Sub

但是我现在想如果我在此界面中有很多搜索屏幕,那可能不是最佳解决方案

photo]

似乎我可以使用“自动过滤”方法,或将范围传递给数组并遍历它,将范围传递给记录集并生成一个sql。但是,我从未使用过这些方法。

这是我第一次使用搜索引擎。如果您有浏览器设计技巧,请关注。我知道我的搜索效率不是很高:例如,只要我向搜索添加新字符,我都会再次遍历整个列表。

更新

我尝试对所有ComboBoxes和TextBoxes进行概括:

' Méthode qui se déclenche lorsqu'on écrit dans le champ du prénom
Private Sub cboFunction_Change()
    ListBoxResults.Clear
    If cboFunction <> "" Then searchresults
End Sub

' Méthode qui se déclenche lorsqu'on écrit dans le champ du prénom
Private Sub txtNameReservist_Change()
    ' on vide la ListBox des résultats pour la mettre à jour
    ListBoxResults.Clear
    ' Si le champ n'est pas vide on lance la méthode searchresults
    If txtNameReservist <> "" Then searchresults
End Sub
...

' Méthode qui aggrège les résultats des recherches
Sub searchresults()
    ' on cherche à partir de la ligne 2 jusqu'au bout de la feuille
    For ligne = 2 To Sheets("RECAP").Range("C1").End(xlDown).Row

        ' création des conditions
        cond_function = Sheets("RECAP").Cells(ligne, 2) Like "*" & cboFunction & "*"
        cond_surname = Sheets("RECAP").Cells(ligne, 3) Like "*" & txtSurnameReservist & "*"
        cond_name = Sheets("RECAP").Cells(ligne, 4) Like "*" & txtNameReservist & "*"
        cond_sex = Sheets("RECAP").Cells(ligne, 5) Like "*" & cboSexReservist & "*"
        cond_rank = Sheets("RECAP").Cells(ligne, 6) Like "*" & cboRankReservist & "*"
        cond_txtIncorporationNumberReservist = Sheets("RECAP").Cells(ligne, 7) Like "*" & cboRankReservist & "*"   

        ...

        ' on teste si les cellules sont proches à droite ou à gauche des données écrites dans les champs de recherche
        If cond_function And cond_surname And cond_name And cond_sex Then
            ' On remplit la ListBox des résultats avec les noms et prénom des personnels
            ListBoxResults.AddItem Sheets("RECAP").Cells(ligne, 3) & " " & Sheets("RECAP").Cells(ligne, 4)
        End If
    Next
End Sub

0 个答案:

没有答案