Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Automatisch Suchen VBA

Forumthread: Automatisch Suchen VBA

Automatisch Suchen VBA
10.12.2024 19:56:58
Stefan
Hallo Gemeinde

Vielleicht könnt Ihr mir Helfen,

auf meinem Tabellenblatt befindet sich eine Intelligente Tabelle, in Zeile 6 ist die Überschrift.
in Zelle C4 möchte ich nach den Inhalten der Tabelle Suchen, z.B. ich Trage den Buchstaben H ein soll sich die Tabelle Live verkürzen,
das funktioniert aktuell nur wenn ich Zelle C4 verlasse.

Der VBA Code lautet:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim searchRange As Range
Dim cell As Range
Dim searchTerm As String
Dim firstRow As Long
Dim lastRow As Long
Dim found As Boolean
Dim c As Range

Set ws = ThisWorkbook.Sheets("Lebensmittel")
firstRow = 7
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set searchRange = ws.Range("A" & firstRow & ":H" & lastRow)

' Überprüfen, ob die Änderung in C4 oder im Suchbereich erfolgt ist
If Not Intersect(Target, ws.Range("C4")) Is Nothing Or Not Intersect(Target, searchRange) Is Nothing Then
Application.EnableEvents = False
searchTerm = Trim(ws.Range("C4").Value) ' Suchbegriff aus C4

' Alle Zeilen zunächst ausblenden
searchRange.EntireRow.Hidden = True

' Durchsuche den Suchbereich
For Each cell In searchRange.Rows
found = False
For Each c In cell.Cells
If InStr(1, c.Value, searchTerm, vbTextCompare) > 0 Then
found = True
Exit For
End If
Next c

' Wenn der Suchbegriff gefunden wurde, die Zeile einblenden
If found Then
cell.EntireRow.Hidden = False
End If
Next cell

Application.EnableEvents = True
End If
End Sub

Was muss ich ändern ? oder ist in Excel noch eine Einstellung nötig.

Vielen Dank

Gruß
Stefan
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisch Suchen VBA
10.12.2024 22:26:24
Oberschlumpf
Hi Stefan,

es ist - nicht - möglich, Aktualisierungen (z Bsp das Anzeigen nur von Zellen, deren Inhalt mit "h" beginnen, oder mit irgdnem andern Buchstaben/Zahl) zu aktivieren, während du noch im Eingabemodus in einer Zelle bist.

Also...
In C4 h eingeben und gleich sofort werden in der intell. Tabelle nur Zellen, beginnend mit h angezeigt = DAS geht nicht!

Das Change-Ereignis, in dem sich dein Code befindet, reagiert erst - nachdem - die Eingabe abgeschlossen, bzw die Zelle verlassen wird.
Das war (direkt im Change-Ereignis) schon immer so, und wird sich, so denke ich, auch nicht ändern.

Dein Ziel kannst du erreichen, wenn du anstelle direkt einer Zelle, die Eingabe in einem Textfeld (ActiveX-Control) in deinem Tabellenblatt verwendest.
In Textfeldern reagiert deren Change-Ereignis sofort bei jeder Eingabe. Da musst du nicht warten, bis das Textfeld wieder verlassen wird.

Wie funktioniert das?
nur mit Anzeige deiner Frage + deines Codes = da hab zuminest ich keine Ahnung

Mehr hilfreiche Antworten könntest du bekommen, wenn du per Upload ne Bsp-Datei mit genügend Bsp-Daten in den richtigen Zellen zeigst.

Ciao
Thorsten
Anzeige
AW: Automatisch Suchen VBA
11.12.2024 20:06:28
daniel
Hi
hier eine möglichkeit, wie du das mit ganz wenig Code erreichen kannst.
wie schon geschrieben:
1. lege die ActiveX-Textbox an
2. verknüpfe die ActiveX-Textbox mit einer Ausgabezelle (z.B. C4), trage hierzu die Adresse der Zelle in die Eigenschaft LinkedCell ein
3. erweitere deine Tabelle um eine Spalte. Füge in diese Spalte die Formel ein: =ZÄHLENWENN(Tabelle1[@[xxx]:[xxx13]];"*"&$C$4&"*") (Spaltentitel natürlich anpassen). Diese Formel zählt, wie oft der Text aus C4 in einer Zeile vorkommt
4. aktivere für die Tabelle den Autofilter und filtere in der hinzugefügten Spalte nach: Zahl, ist größer 0
5. Als Code für das Change-Eventmakro reicht jetzt dieser Code:
Private Sub TextBox1_Change()

Me.ListObjects(1).AutoFilter.ApplyFilter
End Sub


das ApplyFilter sorgt dafür, dass bei einem bestehenden Autofilter mit diesen Einstellungen neu gefiltert wird, wenn sich Zellwerte seit der letzten Filterung geändert haben.

Gruß Daniel
Anzeige
AW: Automatisch Suchen VBA
10.12.2024 23:27:44
Stefan
Vielen Dank
Dann Google ich mal die Optionen mit Textfeld (ActiveX-Control) und versuche es zu ändern.
Gruß
Stefan
AW: Automatisch Suchen VBA
10.12.2024 23:38:46
Stefan
ein Feld mit einer TextBox1 wurde hinzugefügt

Private Sub TextBox1_Change() ' Angenommen, das Textfeld heißt TextBox1
Dim ws As Worksheet
Dim searchRange As Range
Dim cell As Range
Dim searchTerm As String
Dim firstRow As Long
Dim lastRow As Long
Dim found As Boolean
Dim c As Range

Set ws = ThisWorkbook.Sheets("Lebensmittel")
firstRow = 7
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set searchRange = ws.Range("A" & firstRow & ":H" & lastRow)

' Überprüfen, ob das Textfeld leer ist
If Len(Trim(TextBox1.Value)) = 0 Then
' Wenn das Textfeld leer ist, alle Zeilen einblenden
searchRange.EntireRow.Hidden = False
Else
Application.EnableEvents = False
searchTerm = Trim(TextBox1.Value) ' Suchbegriff aus dem Textfeld

' Alle Zeilen zunächst ausblenden
searchRange.EntireRow.Hidden = True

' Durchsuche den Suchbereich
For Each cell In searchRange.Rows
found = False
For Each c In cell.Cells
If InStr(1, c.Value, searchTerm, vbTextCompare) > 0 Then
found = True
Exit For
End If
Next c

' Wenn der Suchbegriff gefunden wurde, die Zeile einblenden
If found Then
cell.EntireRow.Hidden = False
End If
Next cell

Application.EnableEvents = True
End If
End Sub

Vielen Dank
jetzt funktioniert es

Anzeige
AW: Automatisch Suchen VBA
11.12.2024 01:12:08
Piet
Hallo

den Code könnte man noch verkürzen, z.B. so:

mfg Piet

Private Sub TextBox1_Change() ' Angenommen, das Textfeld heißt TextBox1

Dim ws As Worksheet
Dim searchRange As Range
Dim searchTerm As String
Dim firstRow As Long
Dim lastRow As Long
Dim cell As Range
Dim c As Range

Set ws = ThisWorkbook.Sheets("Lebensmittel")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set searchRange = ws.Range("A7:H" & lastRow)

' Überprüfen, ob das Textfeld leer ist
If Len(Trim(TextBox1.Value)) = 0 Then
' Wenn das Textfeld leer ist, alle Zeilen einblenden
searchRange.EntireRow.Hidden = False
Exit Sub
Else
Application.EnableEvents = False
' Alle Zeilen zunächst ausblenden
searchRange.EntireRow.Hidden = True
' Suchbegriff aus dem Textfeld
searchTerm = Trim(TextBox1.Value)
End If

' Durchsuche den Suchbereich
For Each cell In searchRange.Rows
For Each c In cell.Cells
If InStr(1, c.Value, searchTerm, vbTextCompare) > 0 Then
cell.EntireRow.Hidden = False
Exit For
End If
Next c
Next cell

Application.EnableEvents = True
End Sub
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige