Anzeige
Archiv - Navigation
1448to1452
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

Zellen filtern und löschen, wirft Fehlermeldung au

Zellen filtern und löschen, wirft Fehlermeldung au
01.10.2015 12:59:09
Niko
Hallo liebe Community,
ich bin ein VBA Neuling und nutze folgenden Code, um einen Bericht zu filtern und nicht benötigte Daten zu löschen. Wobei WS1 als das entsprechende Tabellenblatt definiert ist:
1 With WS1
2 .Range("A1").AutoFilter Field:=5, Criteria1:="Client"
3 .Range("A1").AutoFilter Field:=6, Criteria1:="Rate"
4 .Rows(1).Hidden = True
5 .UsedRange.SpecialCells(xlCellTypeVisible).Delete
6 .Rows(1).Hidden = False
7 .AutoFilterMode = False
8 End With
9 With WS1
10 .Range("A1").AutoFilter Field:=7, Criteria1:=Array( _
11 "Internal use", "Information inquiry"), Operator:=xlFilterValues
12 .Rows(1).Hidden = True
13 .UsedRange.SpecialCells(xlCellTypeVisible).Delete
14 .Rows(1).Hidden = False
15 .AutoFilterMode = False
16 End With
Das Problem ist, dass ich eine Fehlermeldung bekomme, wenn der Filter keine Ergebnisse liefert. Bzw. nichts gelöscht werden kann:
"Laufzeitfehler '1004': Keine Zellen gefunden"
Der Fehler bezieht sich auf Zeile 5 bzw. 13.
Meine Frage: Wie kann ich dafür sorgen, dass das Skript weiter ausgeführt wird auch wenn keine Zeilen zu löschen sind?
Danke für die Hilfe

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
zu Beginn: On Error Resume Next
01.10.2015 13:01:33
Matthias
Hallo
Was aber dann keine Fehler mehr anzeigt sondern alle überspringt
Gruß Matthias

AW: zu Beginn: On Error Resume Next
01.10.2015 13:06:02
Niko
Hallo,
Danke! Das schreibe ich vor die Schleife?
Kann ich das danach wieder aufheben?
Gruß Niko

On Error GoTo Fehler
01.10.2015 13:16:59
Matthias
Hallo
Beispiel:(hier mit Tabelle1)
somit springt der Code bei einem Fehler zur Sprungmarke
und klappert die Zeilen garnicht erst ab.
Option Explicit
Sub Filter()
Dim WS1 As Worksheet
Set WS1 = Tabelle1
On Error GoTo Fehler
With WS1
.Range("A1").AutoFilter Field:=5, Criteria1:="Client"
.Range("A1").AutoFilter Field:=6, Criteria1:="Rate"
.Rows(1).Hidden = True
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
.AutoFilterMode = False
End With
With WS1
.Range("A1").AutoFilter Field:=7, Criteria1:=Array("Internal use", "Information inquiry"),  _
Operator:=xlFilterValues
.Rows(1).Hidden = True
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
.AutoFilterMode = False
End With
Exit Sub
Fehler:
MsgBox "Es sind keine Daten vorhanden"
On Error GoTo 0
End Sub
Warum hattest Du überall Zahlen vor dem Code stehen?
Und warum beendest Du das With-Konstrukt und setzt es gleich wieder neu?
Müsste doch auch mit 1x With funktionieren
also nach diesem Motto
With WS1
.Range("A1").AutoFilter Field:=5, Criteria1:="Client"
.Range("A1").AutoFilter Field:=6, Criteria1:="Rate"
.Rows(1).Hidden = True
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
.AutoFilterMode = False
.Range("A1").AutoFilter Field:=7, Criteria1:=Array("Internal use", "Information inquiry"),  _
Operator:=xlFilterValues
.Rows(1).Hidden = True
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
.AutoFilterMode = False
End With

Gruß Matthias

Anzeige
AW: On Error GoTo Fehler
01.10.2015 13:32:03
Niko
Die Zahlen hatte ich nur zur Zeilenbenennung davor stehen, damit der geneigte Leser weiß, worauf ich anspiele.
Stimmt, es geht auch mit einmal with ^^
Bin ein Neuling und arbeite aktuell hauptsächlich mit zusammengesuchten code schnipseln, da kommt sowas schon mal vor. Danke für den Hinweise!
Ich habe in dem gleichen Modul noch weitere Schleifen und möchte, dass - sollte woanders ein Fehler auftreten - mir dieser noch angezeigt wird.
Daher habe ich das "On Error goTo next" jetzt in das with Konstrukt vor die erste Filter Anweisung gesetzt.
Funktioniert das so?
Gruß NIko

Anzeige
AW: On Error GoTo Fehler
01.10.2015 14:07:51
Matthias
Hallo
On Error goTo next habe ich nicht vorgeschlagen.
Ich schrieb im letzten Beitrag:
On Error GoTo Fehler
Das heißt wenn ein Fehler auftritt springt der Code zur Sprungmarke Fehler

'... Code
Fehler:'

Wenn der Fehler mit On Error GoTo 0 zurückgesetzt wurde
kann ja weiterer Code ausgeführt werden. Es werden auch wieder andere Fehler angezeigt.
Gruß Matthias

AW: On Error GoTo Fehler
01.10.2015 20:25:12
Daniel
Hi Folks
wenn man hier mit On Error Goto arbeiten will dann so, denn schließlich sollte doch der zweite Teil zum Löschen auch dann ausgeführt werden, wenn der erste Teil keine Zeilen zum Löschen findet.
der Fehler ist ja hier kein echter logischer Fehler, sondern eher ein Bug in der SpecialCells-Funktion, denn ob die Zeilen jetzt nicht mehr da sind, weil sie gelöscht wurden oder weil sie noch nie da waren, spielt für das Ergebnis keine Rolle.
With WS1
.Range("A1").AutoFilter Field:=5, Criteria1:="Client"
.Range("A1").AutoFilter Field:=6, Criteria1:="Rate"
.Rows(1).Hidden = True
On Error Goto Sprung1
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
Sprung1:
On Error GoTo 0
.Rows(1).Hidden = False
.AutoFilterMode = False
End With
With WS1
.Range("A1").AutoFilter Field:=7, _
Criteria1:=Array("Internal use", "Information inquiry"), _
Operator:=xlFilterValues
.Rows(1).Hidden = True
On Error Goto Sprung2
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
Sprung2:
On Error GoTo 0
.Rows(1).Hidden = False
.AutoFilterMode = False
End With
und weil hier ja nur eine Zeile übersprungen wird, kann man auch gleich On Error Resume Next verwenden.
With WS1
.Range("A1").AutoFilter Field:=5, Criteria1:="Client"
.Range("A1").AutoFilter Field:=6, Criteria1:="Rate"
.Rows(1).Hidden = True
On Error Resume Next
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
On Error GoTo 0
.Rows(1).Hidden = False
.AutoFilterMode = False
End With
With WS1
.Range("A1").AutoFilter Field:=7, _
Criteria1:=Array("Internal use", "Information inquiry"), _
Operator:=xlFilterValues
.Rows(1).Hidden = True
On Error Resume Next
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
On Error GoTo 0
.Rows(1).Hidden = False
.AutoFilterMode = False
End With
Gruß Daniel

Anzeige
AW: Prüfen, ob Zeilen zum Löschen da sind
01.10.2015 20:01:40
Daniel
Hi
das Problem an der Sache ist, das das .SpecialCells einen Fehlerabbruch verursacht, wenn es keine Zellen finden kann.
dh du solltest, bevor du das .Specialcells zum löschen anwendest, überprüfen ob es überhaupt zeilen gibt, die gelöscht werden müssen.
das machst du, indem du mit .SpecialCells(xlcelltypevisible) die sichtbaren Zeilen zählst und zwar bevor du die Überschrift ausblendest.
Dann ist nämlich mindestens eine Zeile sichtbar und das das .SpecialCells(xlcelltypevisible) wird nie einen Fehler erzeugen.
Wenn dann die Anzahl der sichtbaren Zeilen = 1 ist, weisst du dass nur die Überschriftenzeile sichtbar ist und somit keine Zeilen gelöscht werden müssen:
With WS1
.Range("A1").AutoFilter Field:=5, Criteria1:="Client"
.Range("A1").AutoFilter Field:=6, Criteria1:="Rate"
If .UsedRange.Columns(1).Cells.Count > 1 Then
.Rows(1).Hidden = True
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
End If
.AutoFilterMode = False
End With
With WS1
.Range("A1").AutoFilter Field:=7, _
Criteria1:=Array("Internal use", "Information inquiry"), _
Operator:=xlFilterValues
If .UsedRange.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
.Rows(1).Hidden = True
.UsedRange.SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
End If
.AutoFilterMode = False
End With
das von den Kollegen vorgestellte On Error Goto ist hier im Prinzp nur eine Notlösung, wenn man keine Möglichkeit hat, die Fehlerursache vorher abzufragen oder wenn dies sehr kompliziert wäre.
Aber hier ist es ja sehr einfach und daher sollte man das auch tun und das On Error Goto für "schwere Fälle" aufsparen.
Gruß Daniel
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige