excel - 如何结合两个搜索框的调查?
问题描述
我有一个员工列表和一个用户表单来搜索这个包含多个字段的列表。
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
解决方案
推荐阅读
- c# - 将死信消息移回处理主题的最简单方法?
- hyperlink - 将链接复制到私人浏览器时出错
- c - 将文件内容复制到结构
- php - 我在 php 中使用 multi_query() 错了吗?
- microsoft-graph-api - 收到的不仅仅是已删除事件的 ID?
- python - 如何在某些坐标上获取像素值
- python - TypeError:需要一个类似字节的对象,而不是使用 Subprocess python 的'str'
- spring-boot - 在没有 @PostConstruct 的情况下,每次与 data.sql 一起自动填充新的 uuid4
- uart - 我在哪里从 UART 读取数据?
- angular - 使用选定的值设置隐藏的表单字段值