Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehlermeldung:Laufzeitfehler 1004 keine Zellen gef

Fehlermeldung:Laufzeitfehler 1004 keine Zellen gef
04.08.2017 10:34:05
Peter
Hallo ihr Excelspezialisten,
zerbreche mir seit Stunden den Kopf wie ich eine Lösung finde ohne Erfolg.
Ich hoffe ihr könnt mir helfen, wie so oft. Bereits hier an alle besten Dank.
Ich erhalte bei nachstehendem Code folgende Meldung:
Laufzeitfehler 1004 - keine Zellen gefunden
Der Fehler tritt auf nach der Zeile
'löscht den gefilterten Bereich
mit der Zeile:
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 11)).SpecialCells( _
xlCellTypeVisible).EntireRow.Delete
Sub Diff_Lehrerliste_vorherige_mit_Lehrerliste_aktuell_vergleichen_filtern_löschen()
Dim lngI As Long, intWert As Integer
Application.ScreenUpdating = False
Worksheets("Lehrerliste_aktuell").Activate
For lngI = 2 To Cells(Rows.Count, 1).End(xlUp).Row
intWert = Application.WorksheetFunction. _
CountIf(Worksheets("Diff_Lehrerliste_vorherige").Range("A:A"), Cells(lngI, 1).Value)
If intWert > 0 Then
Cells(lngI, 1).Interior.ColorIndex = 3
End If
Next lngI
Application.ScreenUpdating = True
'Filtert den farbigen Bereich
Range(Cells(1, 1), Cells(Cells(65536, 1).End(xlUp).Row, 11)).Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$K$201").AutoFilter Field:=1, Criteria1:=RGB(255, 0 _
, 0), Operator:=xlFilterCellColor
'löscht den gefilterten Bereich
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 11)).SpecialCells( _
xlCellTypeVisible).EntireRow.Delete
Selection.AutoFilter
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A2").Select
End Sub

Was muss bitte eingefügt werden, damit es ohne Fehlermeldung mit
Selection.Autofilter weiter geht.
Besten Dank für eure Hilfe.
Gruss
Peter
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung:Laufzeitfehler 1004 keine Zellen gef
04.08.2017 11:01:52
ChrisL
Hi Peter
Zwar nicht die feine Art, aber mit folgender Zeile überspringst du den Fehler:
On Error Resume Next
(eins oberhalb von der Fehlerzeile einfügen)
Falls du optimieren willst, Select und Activate entfernen:
http://www.online-excel.de/excel/singsel_vba.php?f=78
cu
Chris
Anzeige
AW: Fehlermeldung:Laufzeitfehler 1004 keine Zellen gef
04.08.2017 11:12:35
Peter
Hallo Chris,
besten Dank für Deine Hilfe.
Aber On Error Resume Next ist nur eine Notlösung.
Gibt es nicht eine Lösung in der Art - wenn sichtbarer Bereich ohne 1. Zeile leer dann - resume next
sonst durchführen.
Ich weiss nur nicht wie ich das Schreiben kann.
Gruss
Peter
Anzeige
AW: Fehlermeldung:Laufzeitfehler 1004 keine Zellen gef
04.08.2017 11:21:46
Werner
Hallo Peter,
so kannst du prüfen, ob du ein Filterergebnis hast oder nicht und dann entsprechend reagieren.
 If Worksheets("Tabelle1").AutoFilter.Range.Columns(1) _
.SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then
MsgBox "Suchbegriff nicht gefunden"
End If
Das Tabellenblatt und die Spalte (Columns) mußt du an deine Verhältnisse anpassen.
Gruß Werner
Anzeige
AW: Fehlermeldung gelöst
04.08.2017 12:57:55
Peter
Hallo Werner,
besten Dank für Deine Hilfe.
Habe mich für die Variante von Chris entschieden. Funktioniert jedoch nur mit kleiner Änderung:
If Range("$A$1:$K$201").SpecialCells(xlCellTypeVisible).Areas.Count grösser 1 Then
'löscht den gefilterten Bereich
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 11)).SpecialCells( _
xlCellTypeVisible).EntireRow.Delete
End If
Wünsche Dir noch einen schönen Tag.
Gruss
Peter
Anzeige
AW: Fehlermeldung:Laufzeitfehler 1004 keine Zellen gef
04.08.2017 11:23:11
ChrisL
Hi Peter
Zugegeben schön ist es nicht, aber bei einem solch kleinen übersichtlichen Makro m.E. akzeptabel. Wenn du einen Schönheitspreis gewinnen willst, dann starte besser bei den Select ;)
If Range("$A$1:$K$201").SpecialCells(xlCellTypeVisible).Areas.Count > 1 Then ...
cu
Chris
Anzeige
AW: Fehlermeldung gelöst
04.08.2017 12:57:21
Peter
Hallo Chris,
besten Dank für Deine Hilfe.
Habe mich für Deine Variante entschieden. Funktioniert jedoch nur mit kleiner Änderung:
If Range("$A$1:$K$201").SpecialCells(xlCellTypeVisible).Areas.Count grösser 1 Then
'löscht den gefilterten Bereich
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 11)).SpecialCells( _
xlCellTypeVisible).EntireRow.Delete
End If
Wünsche Dir noch einen schönen Tag.
Gruss
Peter
Anzeige
AW: Fehlermeldung:Laufzeitfehler 1004 keine Zellen gef
04.08.2017 11:30:58
Daniel
Hi
ermittle die Anzahl der sichtbaren Zeilen mit Hilfe der der Funktion TEILERGEBNIS(3;...) bzw in VBA WORKSHEETFUNCTION.SUBTOTAL(3, ...)
das entspricht Anzahl2 unter Berücksichtigung der gefilterten Zeilen, dh per Autofilter ausgeblendete Zeilen werden nicht mitgezählt.
IF Worksheetfunction.SubTotal(3, Range(linke_obere_Zelle, rechte_untere_Zelle) > 0 Then
Range(linke_obere_Zelle, rechte_untere_Zelle).SpecialCells(xlcelltypevisible).EntireRow.Delete
end If
du musst für das SubTotal auch nicht den ganzen Zellbereich verwenden, es reicht aus eine Spalte zu nehmen, die keine Leerzellen enthält.
Gruß Daniel
Anzeige
AW: Fehlermeldung gelöst
04.08.2017 12:56:24
Peter
Hallo Daniel,
besten Dank für Deine Hilfe.
Habe mich für die Variante von Chris entschieden. Funktioniert jedoch nur mit kleiner Änderung:
If Range("$A$1:$K$201").SpecialCells(xlCellTypeVisible).Areas.Count grösser 1 Then
'löscht den gefilterten Bereich
Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 11)).SpecialCells( _
xlCellTypeVisible).EntireRow.Delete
End If
Wünsche Dir noch einen schönen Tag.
Gruss
Peter
Anzeige
AW: Fehlermeldung gelöst
04.08.2017 13:17:48
Daniel
Hi
diese Lösung hat eine Lücke.
Wenn die Filterung ergibt, das alle Zellen sichtbar sind oder des so ist, dass die Zeilen 1-x sichtbar und die Zeilen x-Ende ausgeblendet sind, dann ist die Anzahl der sichtbaren Areas ebenfalls gleich 1 und das Löschen wird ebenfalls nicht ausgeführt.
eine weitere mögliche Prüfung wäre, dass du im gefilterten Bereich inklusive der Überschriftenzeile in der ersten Spalte im Sichtbaren Bereich die Zellen zählst und diese Anzahl größer 1 sein muss:
With Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 1))
if .SpecialCells(xlCellTypeVisible).Cells.count > 1 then
.Offset(1, 0).SpecialCells(xlcelltypevisible).EntireRow.Delete
end if
end with

Gruß Daniel
Anzeige
AW: Fehlermeldung gelöst
04.08.2017 14:32:38
Peter
Hallo Daniel,
Danke für den Hinweis habe ihn gleich ausprobiert, funktioniert.
Gruss
Peter

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 1004 in Excel VBA beheben


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler 1004 zu beheben, wenn du mit dem Befehl SpecialCells(xlCellTypeVisible) arbeitest, kannst du folgende Schritte befolgen:

  1. Fehlerüberprüfung einfügen: Füge oberhalb der problematischen Zeile On Error Resume Next ein, um den Fehler zu ignorieren. Dies ist jedoch nur eine temporäre Lösung.

    On Error Resume Next
  2. Sichtbare Zellen prüfen: Überprüfe, ob sichtbare Zellen vorhanden sind, bevor du versuchst, sie zu löschen. Nutze dafür SpecialCells(xlCellTypeVisible).Count.

    If ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Count > 1 Then
       ' Löschen der sichtbaren Zeilen
       ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End If
  3. Korrekte Range verwenden: Achte darauf, dass der Bereich, den du angibst, nicht leer ist. Stelle sicher, dass du den richtigen Bereich mit Cells und UsedRange definierst.


Häufige Fehler und Lösungen

  • Fehler: Keine Zellen gefunden: Dieser Fehler tritt auf, wenn du versuchst, auf eine Zelle zuzugreifen, die nicht sichtbar ist. Überprüfe die Filtereinstellungen.

  • Lösung: Verwende If Range(...).SpecialCells(xlCellTypeVisible).Count > 0 vor dem Löschen, um sicherzustellen, dass sichtbare Zellen existieren.

  • Fehler: Laufzeitfehler 1004 bei der Verwendung von SpecialCells: Dies passiert, wenn die Auswahl keine Zellen enthält. Vermeide Selection und arbeite direkt mit dem Arbeitsblatt.


Alternative Methoden

  • Verwendung von WorksheetFunction.Subtotal: Du kannst die Anzahl der sichtbaren Zeilen auch mit der Funktion SUBTOTAL ermitteln. Diese zählt nur die sichtbaren Zellen und ignoriert ausgeblendete.

    If WorksheetFunction.Subtotal(3, Range("A:A")) > 0 Then
       Range("A2").SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End If
  • Direkte Filterprüfung: Prüfe den Autofilter und reagiere darauf, ob es sichtbare Zellen gibt.

    If Worksheets("Tabelle1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
       ' Weiterverarbeitung
    End If

Praktische Beispiele

Hier ist ein praktisches Beispiel, das die oben genannten Konzepte kombiniert:

Sub DeleteVisibleRows()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Lehrerliste_aktuell")

    On Error Resume Next
    If ws.UsedRange.SpecialCells(xlCellTypeVisible).Count > 1 Then
        ws.UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Else
        MsgBox "Keine sichtbaren Zeilen zum Löschen vorhanden."
    End If
    On Error GoTo 0
End Sub

In diesem Beispiel wird eine Überprüfung auf sichtbare Zeilen durchgeführt, bevor der Löschvorgang ausgeführt wird.


Tipps für Profis

  • Vermeide Select und Activate: Diese Methoden verlangsamen den Code und machen ihn anfälliger für Fehler. Arbeite direkt mit Objekten.

  • Verwende Application.ScreenUpdating = False: Dies beschleunigt die Ausführung deines Codes, indem es das Bildschirm-Update während der Verarbeitung ausschaltet.

  • Fehlerbehandlung implementieren: Nutze On Error GoTo für eine robustere Fehlerbehandlung, anstelle von On Error Resume Next.


FAQ: Häufige Fragen

1. Was ist der Laufzeitfehler 1004 in Excel VBA?
Der Laufzeitfehler 1004 tritt auf, wenn ein Befehl nicht ausgeführt werden kann, weil beispielsweise keine Zellen gefunden wurden oder die angegebene Range ungültig ist.

2. Wie kann ich den Fehler 1004 abfangen?
Du kannst den Fehler abfangen, indem du eine Überprüfung auf sichtbare Zellen einfügst, bevor du versuchst, sie zu löschen. Verwende If ... SpecialCells(xlCellTypeVisible).Count > 0.

3. Was ist der Unterschied zwischen SpecialCells(xlCellTypeVisible) und SpecialCells(xlCellTypeBlanks)?
SpecialCells(xlCellTypeVisible) gibt alle sichtbaren Zellen zurück, während SpecialCells(xlCellTypeBlanks) nur die leeren Zellen auswählt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige