Excel VBA Autofilter Wert mit IF Anweisung auswerten

Moderator: ModerationP

Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon Groot » 24. Sep 2021, 09:20

Guten Morgen zusammen,

ich versuche über eine IF Anweisung den Wert eines Autofilters auszulesen.
Wenn in der Spalte "TAG_COL_V" der "WL" Wert nicht angezeigt wird (ausgeblendet), dann soll die Spalte "TAG_COL_SCHALTBAR" gelöscht werden.
Leider bekomme ich bei der Ausführung immer Fehlercode 1004, Anwendungs- oder objektspezifischer Fehler.

Was mache ich falsch?

Code: Alles auswählen
Public Sub DeleteSchaltbar()
    Dim iColumn As Integer, vColumn As Integer, vRow As Integer
   
        Application.ScreenUpdating = False
           
iColumn = Me.Range("TAG_COL_SCHALTBAR").Column
vColumn = Me.Range("TAG_COL_V").Column
vRow = Me.Range("TAG_COL_V").Row

If Me.Range(vColumn, vRow).AutoFilter(Criteria1:="<>WL") Then
Me.Columns(iColumn).EntireColumn.Delete
End If
   
        Application.ScreenUpdating = True
End Sub


Vielen Dank für eure Hilfe
Groot
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 24. Sep 2021, 09:12

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon Klaus-Dieter » 24. Sep 2021, 10:40

Hallo,

ohne die Datei zu kennen, wird es wohl schwierig sein, zu helfen.
Viele Grüße
Klaus-Dieter
Lösungsvorschläge sind, wenn es keinen anders lautenden Hinweis gibt, von mir getestet.
Künstliche Intelligenz ist besser als natürliche Dummheit.
Benutzeravatar
Klaus-Dieter
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 18547
Registriert: 27. Nov 2003, 23:03
Wohnort: Sassenburg

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon Groot » 24. Sep 2021, 11:26

Hallo,

danke schon mal für die Antwort.
Die Fehlermeldung kommt nur im Sub. Wenn's nicht klappt kann ich eine Beispieldatei machen, die komplette Datei kann ich leider nicht hochladen.
Der Fehler kommt allerdings beim Abarbeiten der IF -Zeile. Sprich, alles darunter wird nicht mehr ausgeführt.
Ich schätze, dass das Autofilter Argument irgendwie ungültig ist, komme aber nicht drauf was mir fehlt.
Groot
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 24. Sep 2021, 09:12

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon HKindler » 24. Sep 2021, 12:02

Hi Groot,

mit Me.Range(vColumn, vRow).AutoFilter(Criteria1:="<>WL") fragst du nicht, ob das Kriterium "<>WL" ist, sondern du versuchst, daas Kriterium zu setzen. Da Excel aber nicht weiß, in welche Spalte es den Filter setzen soll, kommt es zur Fehlermeldung.

Um abzufragen, welcher Filter gesetzt ist, muss du über das Worksheet gehen:
Code: Alles auswählen
If Me.FilterMode Then
    With Me.AutoFilter.Filters(2)
            If .On Then
                if .Criteria1 = "<>WL" Then
                    'Deine Befehle
                End If
            End If
    End With
End If
Hier würde die 2. Spalte des Autofilterbereichs geprüft. Wenn der Autofilter-Bereich also von B2:X10 geht wäre es hier die Spalte C.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6294
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon Groot » 24. Sep 2021, 14:31

Hallo Helmut,

vielen Dank!
Das Programm läuft jetzt schon mal ohne Fehler durch. Allerdings springt das Programm in der Zeile If .On Then raus im Einzelschritt als ob ich nichts gesetzt hätte, obwohl der Autofilter aktiv ist. Dementsprechend wird der Befehl nicht ausgeführt.
Hast du eine Idee warum?
Ich hänge mal eine Beispieldatei an.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Groot
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 24. Sep 2021, 09:12

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon HKindler » 24. Sep 2021, 15:56

Hi,

2 Dinge, die sofort auffallen:

1. Du hast die 2 bei ActiveSheet.AutoFilter.Filters(2) nicht auf deine Gegebenheiten angepasst. Müsste hier ActiveSheet.AutoFilter.Filters(ActiveSheet.Range("TAG_COL_V").Column) heißen.

2. Du hast nicht die Bedingung "<>WL" in deinem Filter gesetzt, sondern 3 Bedingungen mit "=TS", "=TV", "=TX". Das müsstest du dann so prüfen:
Code: Alles auswählen
Sub Rechteck1_Klicken()
Dim Verstecken As Boolean
Dim tmp As Variant
If ActiveSheet.FilterMode Then
    With ActiveSheet.AutoFilter.Filters(ActiveSheet.Range("TAG_COL_V").Column)
            If .On Then
                If .Count = 1 Then
                    If .Criteria1 = "<>WL" Then
                        Verstecken = True
                    End If
                Else
                    tmp = .Criteria1
                    For i = 1 To .Count
                        If tmp(i) = "=WL" Then
                            Verstecken = True
                            Exit For
                        End If
                    Next i
                End If
            End If
    End With
End If
ActiveSheet.Columns(ActiveSheet.Range("TAG_COL_SCHALTBAR").Column).Hidden = Verstecken
End Sub
Das überflüssige Ausschalten des Screenupdates habe ich raus geschmissen. Ebenso das Löschen der Spalte. Statt dessen wird sie aus- und wieder eingeblendet. Somit brauchst du auch keinen Rückgängig-Knopf. Der übrigens sowieso nicht funktioniert hätte, da jede Makro-Ausführung den Undo-Speicher löscht.

EDIT: Hatte noch einen Fehler im Makro...
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6294
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon Groot » 27. Sep 2021, 06:25

Guten Morgen Helmut,

vielen Dank für den Hinweis. Ich habe die Abfrage des Autofilters einfach nicht richtig verstanden bzw. findet man im Internet dazu auch sehr wenig (If-Abfrage des Autofilters). Aber ich denke die Logik hab ich jetzt verstanden :D
Jetzt funktioniert es.

Herzlichen Dank nochmal!
Groot
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 24. Sep 2021, 09:12

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon HKindler » 27. Sep 2021, 12:48

Hi Groot,

wenn ich es mir recht überlege, dann willst du eigentlich nicht den Autofilter auswerten, sondern einfach nur wissen, ob der Wert "WL" angezeigt wird oder nicht. und dann entsprechend die Spalte "Schaltbar" ein- oder ausblenden.
Dann spar dir die ganz komplizierte Auswertung des Autofilters und prüfe direkt darauf ohne auf den Autofilter Rücksicht zu nehmen.

Ein weiterer Vorteil: man kommt sogar ohne Button aus.

Dazu brauchst du eine weiter Spalte (z.B. Spalte E) mit der Formel: =TEILERGEBNIS(103;A2) Dabei ist A2 eine Zelle derselben Zeile, die auf alle Fälle irgendeinen Wert hat.

Jetzt brauchst du noch eine Zelle, nehmen wir H3 mit der Formel =SUMMEWENNS(E:E;D:D;"WL") Hier wird dir nun immer angezeigt, wie viele Zellen mit "WL" gerade sichtbar sind.

Jetzt müssen wir nur noch prüfen, ob dieser Wert 0 ist. Wenn ja, wird Spalte C ausgeblendet, wenn nein wieder eingeblendet. Dies prüfen wir mit jeder Berechnung des Blattes und zwar im Code-Bereich des Tabellenblatts:
Code: Alles auswählen
Private Sub Worksheet_Calculate()
Me.Range("TAG_COL_SCHALTBAR").EntireColumn.Hidden = Me.Range("H1") = 0
End Sub
Hier musst du Range("H1") entsprechend anpassen. Du kannst ja wie bei den anderen Spalten der Zelle einen Namen verpassen. z.B. "Anz_Sichtbare_WL" dann wird daraus Range("Anz_Sichtbare_WL")

Im Anhang die Datei...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6294
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon Groot » 29. Sep 2021, 07:24

Hallo Helmut,

vielen Dank für den zusätzlichen Input!
Ich habe es jetzt so gelöst mit TEILERGEBNIS und SUMMEWENNS. Klappt wunderbar und ist schön schlank!

Das einzige Problem was ich hatte, war dass er mir die letzte Zeile nicht gefiltert hat. Also auch wenn "WL" in der letzten Zeile war, wurde das vom Autofilter nicht ausgeblendet.
Lösung war in der letzten Zeile eine Berechnung zu machen, dann klappt's :D

=TEILERGEBNIS(103;D291)*1
Groot
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 24. Sep 2021, 09:12

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon HKindler » 29. Sep 2021, 08:33

Hi,

Vielen Dank für die Rückmeldung.

Groot hat geschrieben:Das einzige Problem was ich hatte, war dass er mir die letzte Zeile nicht gefiltert hat. Also auch wenn "WL" in der letzten Zeile war, wurde das vom Autofilter nicht ausgeblendet.
Lösung war in der letzten Zeile eine Berechnung zu machen, dann klappt's :D
nun ja, da hat dann wohl eher der Bereich des Autofilters nicht gepasst. Den kann man an den blauen Zeilennummern erkennen, sobald etwas gefiltert wird. Ist eine Zeilennummer nicht blau, dann gehört sie auch nicht zum Filterbereich. Vermutlich hat sich durch das Einfügen der Berechnung der Filterbereich angepasst.

Groot hat geschrieben:=TEILERGEBNIS(103;D291)*1
Was soll denn hier das *1 bringen? TEILERGEBNIS liefert doch sowieso immer eine Zahl.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6294
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon Groot » 29. Sep 2021, 12:19

Hallo Helmut,

es scheint ein "Phänomen" von Excel zu sein, dass wenn man mit =TEILERGEBNIS arbeitet, die letzte Zeile vom Autofilter nicht erkannt / gefiltert wird.

Siehe folgenden Link: https://www.online-excel.de/excel/singsel.php?f=159

Edit: Es hat gereicht die Berechnung mit "*1" nur in der letzten Zeile zu machen. Damit wurde diese dann wieder korrekt gefiltert. Verstehe wer will.
Edit 2: Und ja, ich arbeite mit Office 365, sprich Office 2019.
Groot
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6
Registriert: 24. Sep 2021, 09:12

Re: Excel VBA Autofilter Wert mit IF Anweisung auswerten

Beitragvon HKindler » 29. Sep 2021, 13:02

Hi,

verblüffend! Man lernt doch nie aus. Allerdings ist es so wie ich gesagt habe: die letzte Zeile gehört dann nicht mehr zum Filterbereich. Wieso Excel das macht? Wahrscheinlich weil Teilbereich() gefilterte Werte auswerten soll und es nach Ansicht der Excel-Programmierer keinen Sinn macht, dieses Ergebnis auszublenden. Aber eventuell ist es auch wirklich nur ein Bug.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6294
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste