Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
944to948
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Autofilter mit flexiblen Ranges

Autofilter mit flexiblen Ranges
28.01.2008 11:03:21
Andreas
Hallo liebe Herber.de Forumsteilnehmer,
meine Name ist Andreas Hanisch und heute habe ich mich an meinem ersten VBA Autofilter versucht. Die 1. Variante, die mit starren Namensdefinitionen arbeitet, habe ich erfolgreich umsetzen können. Was mir nun aber vorschwebt, ist ein Code, der über ganze Ranges definiert werden kann. Im Excel Objekt „Filtertest_2“ habe ich dazu schon einiges an Code verfasst. Seine Einzelkomponenten funktionieren. Aber im Produkt bekomme ich Fehlermeldungen verschiedener Art. Ich habe schon versucht mit Hilfe des Forums diese auszuräumen, aber dann kamen neue hinzu.
Testdatei: https://www.herber.de/bbs/user/49441.xls
Die Logik hinter dem Makro soll sein: Stelle fest, ob im Zielrange eine Änderung erfolgte, wenn ja, dann ermittle die Spalte und die Adresse der geänderten Zelle. Übergib diese an den Filter und führe damit eine String Suche („enthält“) durch.
Wenn keine Änderung erfolgte & Zelle wäre nach Eingabe leer, dann schreibe in die Zelle „Bitte Suchbegriff eintragen“ und Zeige alle Werte dieser Spalte an.
Wie schon erwähnt funktionieren die Einzelkomponenten, aber sie harmonieren nicht.
Ich würde mich sehr freuen, wenn ich aus dem Forum den Hinweis erhalte, was der grundlegende Fehler in meiner Logik ist, der zu diesen Fehlermeldungen führt.
Vielen Dank und Gruß,
Andreas

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter mit flexiblen Ranges
28.01.2008 11:33:25
Beverly
Hi Andreas,
versuche es mit diesem Code im Codemodul der Tabelle

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A1:C1")) Is Nothing Then
With Range("A1:C1")
If .Cells(1, 1)  "Bitte Suchbegriff eingeben" And .Cells(1, 1)  "" Then
.AutoFilter Field:=1, Criteria1:="=*" & .Cells(1, 1) & "*"
Else
.AutoFilter Field:=1
.Cells(1, 1) = "Bitte Suchbegriff eingeben"
End If
If .Cells(1, 2)  "Bitte Suchbegriff eingeben" And .Cells(1, 1)  "" Then
.AutoFilter Field:=2, Criteria1:="=*" & .Cells(1, 2) & "*"
Else
.AutoFilter Field:=2
.Cells(1, 2) = "Bitte Suchbegriff eingeben"
End If
If .Cells(1, 3)  "Bitte Suchbegriff eingeben" And .Cells(1, 1)  "" Then
.AutoFilter Field:=3, Criteria1:="=*" & .Cells(1, 3) & "*"
Else
.AutoFilter Field:=3
.Cells(1, 3) = "Bitte Suchbegriff eingeben"
End If
End With
End If
Application.EnableEvents = True
End Sub




Anzeige
AW: Autofilter mit flexiblen Ranges
28.01.2008 13:59:00
Andreas
Hallo Karin,
vielen Dank für Deinen Code. Ich habe ihn in meine Tabelle zum Testen eingesetzt und er funktioniert! Die Idee es über IF Abfragen entsprechend der vorhandenen Tabellendimension zu realisieren wäre eine gute Möglichkeit für eine Vielzahl von Dateien.
Mit der Variante über Target ist m.E. nach jedoch mehr Flexibilität möglich. Wenn ich die Tabelle bspw. um 5 Spalten erweitere, muß ich so nur den Namensbereich einmal anpassen. Mit den Schleifen müßte ich im VBA Code 5 weitere IF Abfragen einbauen.
Wenn innerhalb der vorhandenen Spalten welche eingefügt werden, dann müßte nicht mal der Bereich angepaßt werden, da er ja „mitgeht“.
Vielleicht hast Du ja eine Idee, wie diese Variante realisiert werden könnte, bzw. woran es bisher hakt, ob es überhaupt geht?
Vielen Dank und Grüße,
Andreas

Anzeige
AW: Autofilter mit flexiblen Ranges
28.01.2008 18:23:57
Beverly
Hi Andreas,
versuche es mit diesem Code

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim inSpalte As Integer
Application.EnableEvents = False
If Target.Row = 1 And Target.Column = _
ActiveSheet.AutoFilter.Range(1).Column Then
With ActiveSheet.AutoFilter.Range
inSpalte = Target.Column + 1 - ActiveSheet.AutoFilter.Range(1).Column
If Target  "Bitte Suchbegriff eingeben" And Target  "" Then
.AutoFilter Field:=inSpalte, Criteria1:="=*" & Target & "*"
Else
.AutoFilter Field:=inSpalte
Target = "Bitte Suchbegriff eingeben"
End If
End With
End If
Application.EnableEvents = True
End Sub


Bis später,
Karin

Anzeige
AW: Autofilter mit flexiblen Ranges
29.01.2008 10:38:46
Andreas
Hallo Karin,
Dein Code ist genau das, woran ich dachte! Und es funktioniert einwandfrei, was Du geschrieben hast. Ich muß zugeben, daß der Code komplizierter aussieht, als ich es vermutet hätte. Ich werde mir die Codezeilen in Ruhe einzeln zu Gemüte führen, um zu verstehen, was sie in dieser Kombination bewirken.
Dir auf jeden Fall vielen, vielen Dank. Der Tag gestern war insgesamt etwas ernüchternd und der heutige Morgen versprach auch nicht besser zu werden. Aber was so eine kleine Benachrichtigung aus dem Excel Forum doch bewirken kann ;-)
Liebe Grüße,
Andreas Hanisch

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige