我有一个工作人员列表和一个用户表单,可以使用几个字段搜索此列表。
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
但是我现在想如果我在此界面中有很多搜索屏幕,那可能不是最佳解决方案
似乎我可以使用“自动过滤”方法,或将范围传递给数组并遍历它,将范围传递给记录集并生成一个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