Ich habe ein Suchfeld entworfen, das meine Tabelle filtert, wenn Text in besagtem Suchfeld eingegeben wird. Das Problem ist, dass es so langsam ist, es ist fast gar nicht wert, es in meinem Arbeitsbuch zu haben.VBA-Code für Suchfeld, das Tabelle filtert
Kann irgendjemand über irgendeine Möglichkeit nachdenken, diesen Code zu überarbeiten/verbessern?
Hier ist mein Code zur Zeit:
Private Sub TextBox1_Change()
Dim searchArea As Range, searchRow As Range, searchCell As Range
Dim searchString As String
Dim lastRow As Integer
Application.ScreenUpdating = False
searchString = "*" & LCase(TextBox1.Value) & "*"
Rows.Hidden = False
lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set searchArea = Me.Range("f3:f791", "f3" & lastRow)
searchArea.EntireRow.Hidden = True
For Each searchRow In searchArea.Rows
For Each searchCell In searchRow.Cells
If LCase(searchCell) Like searchString Then
searchRow.Hidden = False
Exit For
End If
Next searchCell
Next searchRow
Application.Goto Range("Z1"), True
ActiveWindow.ScrollColumn = 1
Application.ScreenUpdating = True
End Sub
meinen Code dieses Editiert:
Private Sub TextBox1_Change()
ActiveSheet.ListObjects("states").Range.AutoFilter Field:=1, _
Criteria1:="*" & [G1] & "*", Operator:=xlFilterValues
End Sub
Dies ist jedoch nicht funktioniert. Es gibt Text und Zahlen in Feld 1, und dies auch nur filtert Text, nicht die Zahlen ...
Betrachten wir die 'AutoFilter' Methode, anstatt Zeile-für-Zeile/Zelle-für-Zelle Iteration? –
Wie also würde dieser Code aussehen? Entschuldigung, immer noch sehr neu bei VBA ... – Darren
Sie iterieren auch über einen einzelnen Spaltenbereich und führen deshalb Redundanz ein, weil Sie 'für jede Suchzelle in searchrow.cells' machen. –