首页 > 解决方案 > 如何结合两个搜索框的调查?

问题描述

我有一个员工列表和一个用户表单来搜索这个包含多个字段的列表。

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

标签: excelvbasearch

解决方案


推荐阅读