Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1012to1016
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
Inhaltsverzeichnis

Selbstgebauter Autofilter filtert falsch

Selbstgebauter Autofilter filtert falsch
25.09.2008 14:55:00
Reinhard
Hallo Wissende,
in der Datei https://www.herber.de/bbs/user/55655.xls habe ich in A1 einen Autofilter simuliert per Vba.

Tabellenblatt: C:\Dokumente und Einstellungen\IchalsAdministrator\Eigene Dateien\[ _
AutofilterDynamisch.xls]!Tabelle1
│    A    │
──┼─────────┤
2 │    1.10 │
──┼─────────┤
3 │ 1.10_01 │
──┼─────────┤
4 │ 1.10_02 │
──┼─────────┤
5 │ 1.10_03 │
──┼─────────┤
6 │    1.11 │
──┼─────────┤
7 │ 1.11_01 │
──┼─────────┤
8 │ 1.11_02 │
──┴─────────┘
A2:A8
haben das Zahlenformat: Text


Gefiltert werden soll nach "1.10*" oder "1.11*", filtern nach "1.10*" klappt, aber nach Filtern nach "1.11" werden diese Zeilen angezeigt:


Tabellenblatt: C:\Dokumente und Einstellungen\IchalsAdministrator\Eigene Dateien\[ _
AutofilterDynamisch.xls]!Tabelle3
│    A    │
──┼─────────┤
2 │    1.10 │
──┼─────────┤
6 │    1.11 │
──┼─────────┤
7 │ 1.11_01 │
──┼─────────┤
8 │ 1.11_02 │
──┴─────────┘
A2:A8
haben das Zahlenformat: Text


Der oberste Wert gehört da nicht hin, wo liegt der Fehler im Code?
Code ist nachstehend. Shapes(1) und 2 sind mit Makro belegte Bildchen vom blauen und schwarzen "normalem" Autofilter.
Danke ^ Gruß
Reinhard
Tabelle1


Private Sub ListBox1_Click()
ListBox1.Visible = False
Call Anzeige(ListBox1)
End Sub


Modul1


Option Explicit
Sub Auswahl()
Call Liste
ActiveSheet.ListBox1.Visible = True
End Sub
Sub Liste()
Dim colC As New Collection, Zei As Long, C As Long, Dummy As String
On Error Resume Next
'For Zei = 2 To Range("A" & Rows.Count).End(xlUp).Row 'klappt nicht
For Zei = 2 To Application.WorksheetFunction.CountA(Columns(1)) 'klappt
Dummy = Cells(Zei, 1)
If InStr(Dummy, "_") > 0 Then Dummy = Left(Cells(Zei, 1), InStr(Cells(Zei, 1), "_") - 1)
colC.Add key:=Dummy, Item:=Dummy
Next Zei
On Error GoTo 0
With ActiveSheet
.ListBox1.Clear
.ListBox1.AddItem "Alle"
For C = 1 To colC.Count
.ListBox1.AddItem colC(C)
Next C
End With
End Sub
Sub Anzeige(ByVal Was As String)
Dim Filter As String
Filter = IIf(Was = "Alle", "*", Was & "*")
Range("A1").AutoFilter Field:=1, Criteria1:=Filter, visibledropdown:=False
ActiveSheet.Shapes(1).Visible = Was = "Alle"
ActiveSheet.Shapes(2).Visible = Not (Was = "Alle")
End Sub


9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Selbstgebauter Autofilter filtert falsch
25.09.2008 15:58:00
fcs
Hallo Reinhard,
der Autofilter wird üblicherweise mit Spaltentiteln verwendet.
Wird der Autofilter aktiviert, dann macht Excel normalerweise die 1. Datenzeile, die es findet, zur Spaltentitelzeile. Diese Zeile wird dan beim Filtern nicht mit ausgeblendet. (daran erkennbar das die Zeilennummern links nicht blau dargestellt werden.
Du solltest also oberhalb deiner Daten eine Zeile mit Spaltentiteln einfügen und den Autofilter neu setzen. Ggf. muss du auch in den Makros die Start-Zelle des Autofilters (=Zeile mit Spaltentiteln) anpassen und die Start-Zeilennummer für das Einlesen der Auswahlwerte.
Gruß
Franz
Anzeige
AW: Selbstgebauter Autofilter filtert falsch
25.09.2008 16:44:00
Reinhard
Danke dir Franz,
jetzt weiß ich wo ich was machen muß.
Gruß
Reinhard
Zu früh gefreut :-(
25.09.2008 17:04:00
Reinhard
Sorry Franz,
ich krieg das nicht hin. Ich dachte ich schreibe in die bis jetzt leere Zelle A1 einen Spaltentitel "wert" und das Problem wäre weg, aber nix, es ist immer noch genau so da.

Tabellenblatt: C:\Dokumente und Einstellungen\IchalsAdministrator\Eigene Dateien\[ _
AutofilterDynamisch.xls]!Tabelle1
│    A    │
──┼─────────┤
1 │ Wert    │
──┼─────────┤
2 │    1.10 │
──┼─────────┤
3 │ 1.10_01 │
──┼─────────┤
4 │ 1.10_02 │
──┼─────────┤
5 │ 1.10_03 │
──┼─────────┤
6 │    1.11 │
──┼─────────┤
7 │ 1.11_01 │
──┼─────────┤
8 │ 1.11_02 │
──┴─────────┘
Festgelegte Namen:
Tabelle1!_FilterDatabase: =Tabelle1!$A$2:$A$8, *versteckter Name
Tabelle2!_FilterDatabase: =Tabelle2!$A$1:$B$3, *versteckter Name
Filt                    : =Tabelle2!$A$1:$A$3
Tabelle1!Criteria       : =Tabelle1!$A$1
A1:A8
haben das Zahlenformat: Text


Im Code von
Sub Anzeige(ByVal Was As String) ' Was ist entweder "Alle", "1.10", "1.11"
Dim Filter As String
Filter = IIf(Was = "Alle", "*", Was & "*")
Range("A1").AutoFilter Field:=1, Criteria1:=Filter, visibledropdown:=False
ActiveSheet.Shapes(1).Visible = Was = "Alle"
ActiveSheet.Shapes(2).Visible = Not (Was = "Alle")
End Sub
sehe ich nichts was ich ändern könnte sollte. Soll ich oberhalb von A1 noch eine Zeile einfügen? *nichtversteh*
Das Einzige was mir auffällt, soll ich da in den durch den Autofilter angelegten Namen etwas verändern?
Ich habe gerade keinen Plan was ich wo machen kann/sollte.
Gruß
Reinhard

Anzeige
AW: Zu früh gefreut :-(
25.09.2008 18:07:07
Gerd
Hallo Reinhard, mit dem nicht ernstzunehmenden Level? :-)
Im Zweifel steckt das "Fehlerteufelchen" halt im Detail.

Sub teststart()
Call Anzeige("1.11")
Call Anzeige("Alle")
Call Anzeige("1.10")
End Sub



Sub Anzeige(ByVal Was As String)
Dim strKriterium As String
strKriterium = CStr("=" & IIf(Was = "Alle", "*", Was & "*"))
Range("A1").AutoFilter Field:=1, Criteria1:=strKriterium, visibledropdown:=False
End Sub


Gruß Gerd

AW: Zu früh gefreut :-(
25.09.2008 18:47:00
Reinhard
Hallo Gerd,
ja, mit dem Level, was soll ich da sagen :-)
Würde Hans hier einen Leveltest anbieten, und im Exceltest auf mistige Fragen zu Pivottabellen und Arrayformeln weglassen wäre ich gar nicht schlecht *schätz*, sowas wie mittelgut, bindet er sowas unnötiges mit ein hab ich dann halt einen kleineren Excellevel.
Und Vba, wie kann ich da Profi wählen wenn ich Codes von nepumuk, K.Rola sehe?
Okay, du hast ja meinen Code gesehen z.B. jetzt bei dieser Anfrage, ich bin schon so "gut" daß ich solch einen Code aus Eigenwissen entwickeln kann, aber ich bin noch lange nicht so "gut" den Code zum Abschluß zu brigen ohne irgendwo nachzufragen.
An irgendwelchen "Kleinigkeiten" bleibe ich regelmäßig stundenlang hängen :-(
Mein Level ist also
Excel: je nachdem um was es geht mies bis excellent
Vba: je nachdem um was es geht mies bis fast excellent
Jetzt zu deiner Antwort, ich baue mal das Gleichheitszeichen ein...
Gruß
Reinhard
Anzeige
Leider auch damit keine Freude :-)
25.09.2008 18:59:23
Reinhard
Hallo Gerd,
leider bleibt der Fehler, "1.10" wird mitangezeigt auch wenn ich nach "1.11" filtere :-(
Ich habe die eine prozedur so abgeändert:
Sub Anzeige(ByVal Was As String)
Dim Filter As String
'Filter = IIf(Was = "Alle", "*", Was & "*")
Filter = CStr("=" & IIf(Was = "Alle", "*", Was & "*"))
Range("A1").AutoFilter Field:=1, Criteria1:=Filter, visibledropdown:=False
ActiveSheet.Shapes(1).Visible = Was = "Alle"
ActiveSheet.Shapes(2).Visible = Not (Was = "Alle")
End Sub
Und sogar dies so verändert:

Private Sub ListBox1_Click()
ListBox1.Visible = False
Call Anzeige(CStr(ListBox1.Text))
End Sub


Hier die Datei: https://www.herber.de/bbs/user/55663.xls
Gruß
Reinhard

Anzeige
AW: Leider auch damit keine Freude :-)
25.09.2008 22:01:00
Gerd

Sub Liste()
Dim colC As New Collection, Zei As Long, C As Long, Dummy As String
'On Error Resume Next
'For Zei = 2 To Range("A" & Rows.Count).End(xlUp).Row 'klappt nicht
For Zei = 2 To Application.WorksheetFunction.CountA(ActiveSheet.Columns(1)) 'klappt
Dummy = cstr(ActiveSheet.Cells(Zei, 1))
If InStr(Dummy, "_") = 0 Then '*Dummy = Left(Cells(Zei, 1), InStr(Cells(Zei, 1), "_") - 1)
colC.Add key:=CStr(Zei - 1), Item:=Dummy
Next Zei
'On Error GoTo 0
With ActiveSheet
.ListBox1.Clear
.ListBox1.AddItem "Alle"
For C = 1 To colC.Count
.ListBox1.AddItem colC(C)
Next C
End With
End Sub


Nimm' mal eine neue Mappe u. formatiere die Spalte A neu u. trage die Werte neu ein.
P.S.: Warum Namen u. die 2. Tabelle sowie 2 Autoformen erforderlich sind, kann ich leider nicht nachvollziehen.
Gruß Gerd

Anzeige
scheint gelöst zu sein :-)
26.09.2008 08:49:50
Reinhard
Moin Gerd,
ja, in einer neuen Mappe klappt es bestens. Sicherheithalber habe ich die Daten alle manuell reingeschrieben und nicht reinkopiert. Denn, wenn man A2:A8 rauskopiert wird der Autofilter mitkopiert, das war mir zu unsicher, deshalb loieber neu geschrieben.

Festgelegte Namen:
Tabelle1!_FilterDatabase: =Tabelle1!$A$1:$A$8, *versteckter Name
Tabelle2!_FilterDatabase: =Tabelle2!$A$1:$B$3, *versteckter Name
Tabelle1!Criteria       : =Tabelle1!$A$1


Zu den Namen, nur der Name "Filt" war von mir, die anderen erzeugt Excel bzw. der Autofilter selbst. Und meine selbstgebastelte Jeannie listet alle namen auf, egal ob versteckt oder nicht.
Übrigens funktioniert heute morgen auch die Mappe die gestern fehlerhaft filterte.
Der Name "Tabelle1!Criteria", der angezeigt wird als "Suchkriterien" verwies seltsamerweise auf "=Tabelle1!$A$2", nach Änderung auf "=Tabelle1!$A$1" wurde korrekt gefiltert.
Erklärlich ist mir das nicht denn gestern wies der Name ja auch auf "=Tabelle1!$A$1" hin und es wurde falsch gefiltert.
Was Excel bewog dies dann irgendwann auf "=Tabelle1!$A$2" abzuändern entzieht sich meiner Kenntnis.
Für alles habe ich insgesamt nur eine, aber ich glaube die Erklärung.
Wie von dir gesagt braucht der Autofilter eine Spaltenüberschrift. Zu Anfang hatte ich ja A1 leer, also nahm sich der Autofilter A2 als Spaltenüberschrift.
Davon, daß ich dann aufgrund deines Tipps eine Überschrift in A1 reinsetzte bekam der Autofilter ja nix mit...
Und die zwei Bilder, ich wollte ja den Autofilter "nachbauen", speziell die Option "beginnt mit", weil ich die "übersehen" hatte *schäm* und dachte mein XL2000 hätte die gar nicht :-)
(ich glaube wegen so Patzern bleibe ich bei meinem Level hier *gg*)
Dem widerspricht ja nicht daß ich im "Nachbau" den Autofilter "verdeckt benutze.
Also brauchte ich ja auch einmal einen blauen und einaml einen schwarzen Pfeil nach unten. Dazu erstellte ich im Tabellenblatt 2 auch Autofilter und machte "Fotos" vom blauen und schwarzen Pfeil.
Danke dir für deine Mühen und Tipps, die letztlich zum Erfolg führten
Gruß
Reinhard

Anzeige
AW: scheint gelöst zu sein :-)
26.09.2008 09:27:52
Gerd
Hallo Reinhard,
na, dann habe ich dein Vorgehen jetzt verstanden.
Der Tipp mit der Überschrift kam übrigens von Franz.
Gruß Gerd

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige