J'essaie de filtrer les enregistrements affichés sur un sous-formulaire en fonction de ce qui est tapé dans une zone de texte sur le sous-formulaire. Le sous-formulaire s'appelle Utilisateurs et se trouve sur le formulaire Groupe. Dans le sous-formulaire Utilisateurs, il y a une zone de texte appelée txtFilter. Si je tape "W" dans txtFilter, je veux montrer seulement les enregistrements dans lesquels le nom de famille ou le nom d'utilisateur de l'utilisateur commence par un "W". Comme je continue à taper W ... A ... L je veux seulement les utilisateurs dont le nom de famille ou le nom d'utilisateur commencent par "Wal" pour montrer. J'ai une idée vague que je dois utiliser la propriété recordset ou serverFilter du sous-formulaire pour faire cela, mais je ne sais vraiment pas quoi faire. Aidez-moi, s'il vous plaît!Filtre sous-formulaire basé sur ce qui est tapé dans une zone de texte sur le sous-formulaire
1
A
Répondre
1
Private Sub txtFilter_Change()
If Nz(Me.txtFilter.Text, "") = "" Then
Me.FilterOn = False
Me.txtFilter.SetFocus
Exit Sub
End If
Me.Filter = "lastName like '" + Me.txtFilter.Text + "%' or userName like '" & _
Me.txtFilter.Text + "%'"
Me.FilterOn = True
Me.txtFilter.SetFocus
Me.txtFilter.SelStart = Len(Nz(Me.txtFilter.Text, "")) + 1
End Sub
0
mise à jour rapide de @dmr réponse pour l'accès 2013:
- Change « % » à « * » - L'accès utilise l'astérisque pour wildcard. Peut-être vouloir l'ajouter avant le texte, en plus de après.
- Vous devez activer AllowAdditions dans les propriétés du formulaire, sinon des erreurs de mise au point se produisent lorsque le filtre renvoie zéro appel.
- Ce code supprime les espaces, ce qui rend impossible l'ajout d'espaces à votre recherche (puisque vous ne pouvez pas taper 'deux mots' sans d'abord taper 'deux').
réponse modifiée:
Private Sub txtFilter_Change()
Dim search_text As String
search_text = Me.txtFilter
If Nz(Me.txtFilter.Text, "") = "" Then
Me.FilterOn = False
Me.txtFilter.SetFocus
Exit Sub
End If
Me.Filter = "lastName like '*" + Me.txtFilter.Text + "*' or userName like '*" & _
Me.txtFilter.Text + "*'"
Me.FilterOn = True
Me.txtFilter.SetFocus
Me.txtFilter.Value = search_text
Me.txtFilter.SelStart = Len(Nz(Me.txtFilter.Text, "")) + 1
End Sub