Hi Leute,
ich bin im Tema VBA in Excel leider nicht bewandert und hatte/habe aber folgendes Problem:
Ich habe eine Tabelle, welche quasi täglich erweitert wird. Oberhalb dieser Tabelle wollte ich ein Suchfeld einfügen. Das hat soweit auch gut geklappt. Als Verknüpfung für den Code habe ich ein Formularsteuerelement eingefügt und dieses mit dem Code/Makro verknüpft. Auf Knopfdruck sollte nun die Tabelle automatisch gefiltert werden, so dass nur noch die Felder angezeigt werden, die mit dem Suchbegriff übereinstimmen. Leider ist es jedoch so, dass bei mehreren identischen Suchbegriffen wohl nur der erste rausgesucht wird und dahinter die "falschen" Spalten nicht mehr gelöscht werden. Zumindest die mit einem Eintrag in Spalte B. Wenn in Spalte B etwas steht, egal was, löscht er sie nicht. Wenn die Spalte leer ist, wird die komplette Zeile gelöscht.
So sieht die Tabelle vor der Eingabe eines Suchbegriffs aus:
Wenn ich nach dem Nachnamen Müller suche, sieht das ganze so aus:
Er sucht, wie beschrieben, zumindest nach dem ersten übereinstimmenden Begriff, aber danach geht es nicht mehr richtig weiter, wenn die Spalte B beschrieben ist. Ist B leer, werden die Zeilen gelöscht.
Hier einmal der Code:
Ich hoffe, ihr könnt mir helfen. Ich habe mir das schon zusammensuchen müssen. Mit Formeln geht es leider nicht, auch nicht mit bedingter Formatierung, da unsere Excel Version zu alt ist und diese Formeln/Formatierungen nicht unterstützt. Daher muss es leider über VBA gehen.
LG
ich bin im Tema VBA in Excel leider nicht bewandert und hatte/habe aber folgendes Problem:
Ich habe eine Tabelle, welche quasi täglich erweitert wird. Oberhalb dieser Tabelle wollte ich ein Suchfeld einfügen. Das hat soweit auch gut geklappt. Als Verknüpfung für den Code habe ich ein Formularsteuerelement eingefügt und dieses mit dem Code/Makro verknüpft. Auf Knopfdruck sollte nun die Tabelle automatisch gefiltert werden, so dass nur noch die Felder angezeigt werden, die mit dem Suchbegriff übereinstimmen. Leider ist es jedoch so, dass bei mehreren identischen Suchbegriffen wohl nur der erste rausgesucht wird und dahinter die "falschen" Spalten nicht mehr gelöscht werden. Zumindest die mit einem Eintrag in Spalte B. Wenn in Spalte B etwas steht, egal was, löscht er sie nicht. Wenn die Spalte leer ist, wird die komplette Zeile gelöscht.
So sieht die Tabelle vor der Eingabe eines Suchbegriffs aus:
Wenn ich nach dem Nachnamen Müller suche, sieht das ganze so aus:
Er sucht, wie beschrieben, zumindest nach dem ersten übereinstimmenden Begriff, aber danach geht es nicht mehr richtig weiter, wenn die Spalte B beschrieben ist. Ist B leer, werden die Zeilen gelöscht.
Hier einmal der Code:
Code:
Sub FilterList()
'Variablen
Dim rngCurrent As Range, rngHide As Range, found As Boolean
With ActiveSheet
.UsedRange.EntireRow.Hidden = False
' Wenn Suchbegriff leer blende alle Zeilen wieder ein und beende Prozedur
If .Range("C2").Value = "" Then
Exit Sub
End If
' Startbereich festlegen
Set rngCurrent = .Range("B5")
' so lange verarbeiten bis Bereich am Ende angelangt ist
While rngCurrent.Address <> .Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Address
' Wenn der Suchbegriff gefunden wurde
If rngCurrent.Value Like .Range("C2").Value Then
found = True
' prüfe ob für den Bereich Untereinträge existieren
If rngCurrent.Offset(1, 0).Value <> "" Then
' verschiebe Zeile über den aktuellen Bereich hinaus damit er nicht ausgeblendet wird
Set rngCurrent = rngCurrent.End(xlDown).Offset(1, 0)
Else
' keine Untereinträge
Set rngCurrent = rngCurrent.Offset(1, 0)
End If
Else
' Suchbegriff in der Zeile nicht enthalten, kombiniere den Bereich in einer Variablen um sie später auszublenden
If Not rngHide Is Nothing Then
Set rngHide = Union(rngHide, rngCurrent.EntireRow)
Else
Set rngHide = rngCurrent.EntireRow
End If
Set rngCurrent = rngCurrent.Offset(1, 0)
End If
Wend
' Wenn der Suchbegriff gefunden wurde
If found Then
' blende die nicht zutreffenden Zellen aus
If Not rngHide Is Nothing Then rngHide.EntireRow.Hidden = True
Else
MsgBox "Kein Eintrag gefunden.", vbExclamation
End If
End With
End Sub
Ich hoffe, ihr könnt mir helfen. Ich habe mir das schon zusammensuchen müssen. Mit Formeln geht es leider nicht, auch nicht mit bedingter Formatierung, da unsere Excel Version zu alt ist und diese Formeln/Formatierungen nicht unterstützt. Daher muss es leider über VBA gehen.
LG