Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
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

Autofilter mit Eingabezellen -> Zellen leeren

Autofilter mit Eingabezellen -> Zellen leeren
06.03.2017 08:46:23
Christian
Hallo zusammen,
ich habe heute wieder ein mal ein kleines VBA-Problem.
Ich habe hier eine Kundendatei (mit Schreibschutz) und steuere diese über einen Autofilter. Dieser Autofilter wird über Eingabezellen gesteuert. Der Code sieht also z. B. so aus:
If Target.Address = "$B$4" Then
ActiveSheet.Unprotect Password:=""
If Not IsEmpty(Target) Then
Selection.AutoFilter Field:=1, Criteria1:=Range("B4").Text
Else
Selection.AutoFilter Field:=1
End If
ActiveSheet.Protect Password:="", AllowFiltering:=True
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1

Jetzt möchte ich gerne die Filterung zurücksetzten. Bis jetzt spreche ich den Autofilter mit ".ShowAllDat" an. Da ich aber einen Blattschutz eingerichtet habe,
muss ich diesen vorher deaktivieren und nachehr wieder aktivieren. Das führt zu einer fühlbaren Verzögerung.
Ich hatte mir dann überlegt, dass es ja ausreichen müsste, wenn ich meine Eingabezellen leeren würde. Das habe ich dann auch mit ".clearcontents" versucht.
Die Zellen sind dann zwar leer, aber der Autofilter ändert sich aber nicht.
Es funktioniert nur, wenn ich manuell die Zelle mit der Maus anklicke und den Inhalt lösche.
Was kann ich dagegen tun bzw. wie kann ich den Autofilter dazu überreden, auf eine leere Zelle zu reagieren, welche nur durch VBA-Code erzeugt wurde?
Gruß
Christian

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter mit Eingabezellen -> Zellen leeren
06.03.2017 09:07:32
onur
Hi,

ActiveSheet.Protect Password:="", AllowFiltering:=True
bedeutet doch, dass du filtern darfst trotz blattschutz.
Abgesehen davon, autofilter macht nix ausser die unerwünschten zeilen auszublenden.
wenn du die .visible-eigenschaft der zeilen auf true setzt, siehst du sie alle.
Versuch einer besseren Problemdarstellung
07.03.2017 11:58:29
Christian
Hallo onur,
danke für deine Antwort. Die bringt mich leider nicht weiter und weil sonst keiner auf mein Post geantwortet hat, versuche ich das Problem grundsätzlicher zu beschreiben:
Ich habe einen Autofilter mit 25 Spalten in denen gefiltert wird. Der Autofilter wird über 25 "Eingabezellen" gesteuert. Ich möchte gerne, dass wenn alle Eingabezellen leer sind (Mit der Tastatur die Zelle gewählt und mit der Taste "Entf" geleert") der Autofilter nicht alle Daten anzeigt, sondern gar keine! Der Grund ist der Datenschutz. Somit werden auf dem Computerbildschirm nur Daten angezeigt, wenn explizit nach Ihnen über die Eingabefeldern gesucht wird.
Ich hoffe Ihr könnt mich verstehen...
Gruß
Christian
Anzeige
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 12:43:07
onur
Hi,
Versuch das doch mal:
If Target.Address = "$B$4" Then
ActiveSheet.Unprotect Password:=""
If Not IsEmpty(Target) Then
Selection.AutoFilter Field:=1, Criteria1:=Range("B4").Text
Else
Selection.AutoFilter Field:=1, Criteria1:="IrgendEinUnmöglichZuFindenderText"
End If
ActiveSheet.Protect Password:="", AllowFiltering:=True
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1

AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 13:27:29
Christian
Hallo Onur,
vielen Dank noch mal.
Aber, was passiert denn, wenn ich in "B4" keinen Wert eingebe (B4 würde der Kundennummer bei mir entsprechen) sondern in "F4" etwas eingebe (bei mir wäre das die Suche nach dem Nachnahmen).
Wenn ich deinen Code richtig interpretiere, dann würde ich nichts angezeigt bekommen, da im Field:=1 nach "IrgendEinUnmöglichZuFindenderText" gesucht würde...
Wie gesagt, mein Autofilter filter 25 Spalten mit jeweils 25 Eingabefeldern.
Ich hatte es ursprünglich so versucht.
Um den Autofilter der ersten Spalte anzusprechen habe ich wie gesagt folgenden Code genutzt:
If Target.Address = "$B$4" Then
ActiveSheet.Unprotect Password:=""
If Not IsEmpty(Target) Then
Selection.AutoFilter Field:=1, Criteria1:=Range("B4").Text
Else
Selection.AutoFilter Field:=1
End If
ActiveSheet.Protect Password:="", AllowFiltering:=True
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
End If

Danach wollte ich etwas versuchen, was ungefähr so funktioniert hätte:
"Wenn Zelle B4:N4 gleich "", dann Autofilter "Field:=1, Criteria1:="IrgendEinUnmöglichZuFindenderText" ansonsten Autofilter "Field:=1".
Beim Starten der Exceldatei (wenn meine Eingabefelder noch leer sind), wird wie gewollt nichts angezeigt. Gebe ich z. B. nun im Eingabefeld B4 etwas ein, wird auch richtig gefiltert. Leere ich aber die Eingabezelle über die Tastatur (Taste "Entf"), wird der Autofilter nicht zurückgesetzt... Sehr kurios...
Gruß
Christian
Anzeige
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 13:30:46
onur
Kannst du mal posten?
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 13:31:32
onur
zumindest eine anonymisierte version.
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 13:42:55
Christian
Das wird sehr schwirige,
da ich mittels VBA auch auf 7 weitere externe Excel-Dateien bezugnehme und selbst wenn ich die eine Datei hochladen würde, würde der darin enthaltene VBA-Code nie durchlaufen... :-(
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 13:47:03
onur
Geht mir nur um das Modul/das blatt mit dem Autofilter, der rest ist egal
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 13:46:56
Christian
Hier mal ein Screenshot von der Eingabemaske:
Userbild
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 14:21:00
onur
So kannst du testen, ob alle Zellen leer sind: (Statt: "Wenn Zelle B4:N4 gleich "", dann )
Dim v, s
Dim found As Boolean
For s = 2 To 14
If Not IsEmpty(Cells(4, s)) Then found = True
Next s
If Not found Then
'Dein Code
'Dein Code
End If

Anzeige
AW: Autofilter mit Eingabezellen -> Zellen leeren
08.03.2017 09:52:40
Christian
Hallo.
Diesen Code habe ich natürlich auch probiert. Er funktionier leider aber nur genau einmal!
Also ich öffne Die Arbeitsmappe, naturgemäß sind alle Eingabefelder leer. Deshalb wird automatisch für Field:=1 ein Wert gesucht, den es nicht geben kann und deshalb wird auch nichts angezeigt. Gebe ich jetzt in irgendein Eingabefeld etwas ein, dann wird auch danach richtig gesucht. Bis hierhin alles top!
Aber:
Wenn ich dann ein Eingabefeld mit der Taste "Entf" auf meiner Tastatur leere, filtert der Autofilter nichts mehr und es werden alle Argumente der Tabelle angezeigt.
Kann es sein, dass Excel den Tastaturbefehl "Entf" nicht als Änderung im Tabellenblatt erkennt (obwohl ich das Makro mit "Private Sub Worksheet_Change(ByVal Target As Range)" klassifiziert habe)?
Gruß
Christian
Anzeige
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 14:39:48
onur
so ähnlich (ungetestet- ggf anpassen) kannst du alle Spalten absuchen, ohne den code 14 mal zu schreiben
ActiveSheet.Unprotect Password:=""
for s=2 to 14
if s=3 then next s
If Not IsEmpty(cells(4,s)) Then
Selection.AutoFilter Field:=s-3, Criteria1:="*" & Range(cells(4,s)) & "*"
Else
Selection.AutoFilter Field:=s-3, Criteria1:="XYZXYZ" & Range(cells(4,s)) & "*"
End If
ActiveSheet.Protect Password:="", AllowFiltering:=True
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
next s
ActiveSheet.Protect Password:="", AllowFiltering:=True
Anzeige
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 15:08:51
Christian
So, ich habe den mal getestet... ;-)
Ich bekomme beim Durchlaufen des Codes einen Fehler:
"Fehler beim Kompilieren: Next ohne For" und markiert wird der Code-Bereich "If s = 3 Then Next s"
Ich frage mich, was du mit der Code-Zeile bezwecken willst. Willst du die eigentlich leere Spalte 3 damit überspringen (was ja richtig wäre)?
Gruß
Christian
AW: Autofilter mit Eingabezellen -> Zellen leeren
07.03.2017 15:13:37
onur
Genau.
dann schreibe eine zeile for next s (unten)
weiter:
und oben:
if s=3 then goto weiter:
Du könntest natürlich statt dessen noch eine if-schleife einbauen
for s=2 to 14
if s3 then
und den rest
end if
next s
Anzeige
AW: Autofilter mit Eingabezellen -> Zellen leeren
08.03.2017 08:02:25
Christian
Irgendwie habe ich ein Brett vor dem Kopf.
Ich habe den Code so angepasst:
ActiveSheet.Unprotect Password:=""
For s = 2 To 14
If s 3 Then
If Not IsEmpty(Cells(4, s)) Then
Selection.AutoFilter Field:=s - 3, Criteria1:="*" & Range(Cells(4, s)) & "*"
Else
Selection.AutoFilter Field:=s - 3, Criteria1:="XYZXYZ" & Range(Cells(4, s)) & "*"
End If
ActiveSheet.Protect Password:="", AllowFiltering:=True
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
End If
Next s
ActiveSheet.Protect Password:="", AllowFiltering:=True

Leider passiert jetzt NICHTS...
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige