Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehlermeldung bei Makro unterdrücken

Forumthread: Fehlermeldung bei Makro unterdrücken

Fehlermeldung bei Makro unterdrücken
17.12.2019 15:39:58
Tobias
Hallo,
in einem Makro wird die Spalte E nach leeren Zellen durchsucht und die entsprechenden Zeilen gelöscht:
Range("E:E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Klappt wunderbar, bis der Fall eintritt, bei dem es gar keine leeren Zellen in Spalte E gibt. In diesem Fall kommt eine Fehlermeldung und das Makro wird abgebrochen.
DIeser Versuch, die Fehlermeldungen zu unterbinden ging leider schief:
Application.DisplayAlerts = False
Range("E:E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Application.DisplayAlerts = True
Auch hier kommt die Fehlermeldung „Laufzeitfehler '1004': Keine Zellen gefunden“
Hat jemand eine Idee?
Danke,
Tobias
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung bei Makro unterdrücken
17.12.2019 15:43:14
Hajo_Zi
Hallo Tobias,
on Error resume Next
Rang..
on Error goto 0

AW: Fehlermeldung bei Makro unterdrücken
18.12.2019 09:31:57
Tobias
Hallo Hajo,
also das tut einwandfrei! Die anderen Vorschläge habe ich daher gar nicht mehr ausprobiert ...
Vielen Dank!
Tobias
AW: Fehlermeldung bei Makro unterdrücken
17.12.2019 16:13:45
Daniel
Hi
ja das ist das Problem mit den SpecialCells, weil mit Fehler abbrechen, wenn sie keine Zellen finden.
das Application.DisplayAlerts schaltet nicht die Fehlermeldungen aus, sondern die Rückfragen des Systems, wenn es eine Entscheidung vom Anwender anfordert (z.B. vorhandene Datei beim Speichern unter überschreiben, Tabellenblatt wirklich löschen, usw)
Diese Rückfragen sind keine Fehlermeldungen.
in deinem Fall am einfachsten wie von Hajo beschrieben mit On Error Resume Next (bei Fehler mit dem nächsten Programmschritt weiter machen), weil es ja egal ist, ob keine Leerzeilen in der Datei sind, weil du sie raus gelöscht hast oder weil schon vorher keine drin waren.
alternativ mit einer entsprechenden Abfrage:
If Worksheetfunction.CountBlank(Activesheet.Usedrange.Columns(5)) > 0 then
Range("E:E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End IF

Gruß Daniel
Anzeige
AW: Fehlermeldung bei Makro unterdrücken
17.12.2019 16:14:09
Werner
Hallo,
als Alternative zu Hajos Holzhammermethode:
If WorksheetFunction.CountBlank(Columns("E")) > 0 Then
MsgBox "Hier dein Löschmakro"
End If
Gruß Werner
das tut nicht.
17.12.2019 16:26:26
Daniel
Problem ist, dass das WorksheetFunction.CountBlank die zellen im tatsächlich angegeben Zellbereich ermittelt, während das .SpecialCells immer die Schnittmenge mit der UsedRange bildet und nur in diesem Bereich nach Zellen sucht.
dh dein WorksheetFunction.CountBlank(Columns("E")) gibt dir nur dann eine 0 zurück, wenn wirklich alle 1,04 Mio Zellen der Spalte E gefüllt sind.
Schau dir auch mal meine Antwort an.
Gruß Daniel
Anzeige
AW: das tut nicht.
17.12.2019 16:32:51
Werner
Hallo Daniel,
hast natürlich recht - da hab ich nicht aufgepasst.
Aber ich persönlich würd UsedRange nicht nehmen - wäre mir zu unsicher. Dann lieber die letzte belegte Zelle in Spalte E ermitteln, oder CurrentRegion.
Gruß Werner
AW: das tut nicht.
17.12.2019 16:49:51
Daniel
entscheidend ist die Frage, was das SpecialCells macht und das richtet sich meinen Erfahrungen nach nach der Usedrange.
daher ist es hier am sinnvollsten, diese zu verwenden.
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Fehlermeldung bei Makro unterdrücken in Excel VBA


Schritt-für-Schritt-Anleitung

Um Fehlermeldungen in einem Excel VBA-Makro zu unterdrücken, kannst du die On Error Resume Next-Anweisung verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor (Alt + F11).

  2. Füge das folgende Makro in ein Modul ein:

    Sub LeereZeilenLoeschen()
       On Error Resume Next
       Range("E:E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
       On Error GoTo 0
    End Sub
  3. Dieses Makro sucht in Spalte E nach leeren Zellen und löscht die entsprechenden Zeilen, ohne dass eine Fehlermeldung angezeigt wird, wenn keine leeren Zellen vorhanden sind.


Häufige Fehler und Lösungen

Ein häufiger Fehler, den viele Anwender erleben, ist der Laufzeitfehler '1004', wenn keine leeren Zellen gefunden werden. Hier sind einige Lösungen:

  • Lösung 1: Verwende On Error Resume Next, um die Fehlermeldung zu ignorieren.

  • Lösung 2: Überprüfe zuerst, ob es leere Zellen in der Spalte gibt:

    If WorksheetFunction.CountBlank(ActiveSheet.UsedRange.Columns(5)) > 0 Then
       Range("E:E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End If

Alternative Methoden

Es gibt verschiedene Ansätze, um Excel VBA Fehlermeldungen zu unterdrücken:

  1. Fehlerüberprüfung vor der Ausführung: Mit der CountBlank-Funktion kannst du sicherstellen, dass es leere Zellen gibt, bevor du das Löschen versuchst.

  2. Verwendung von Application.DisplayAlerts: Diese Methode ist für Rückfragen gedacht und unterdrückt keine Laufzeitfehler. Sie ist also nicht geeignet für die Fehlermeldungen, die du vermeiden möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du in verschiedenen Szenarien Fehlermeldungen unterdrücken kannst:

  • Beispiel 1: Mit On Error Resume Next:

    Sub Beispiel1()
       On Error Resume Next
       Range("E:E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
       On Error GoTo 0
    End Sub
  • Beispiel 2: Mit CountBlank:

    Sub Beispiel2()
       If WorksheetFunction.CountBlank(ActiveSheet.UsedRange.Columns(5)) > 0 Then
           Range("E:E").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
       End If
    End Sub

Tipps für Profis

  • Verwende On Error GoTo für spezifischere Fehlerbehandlungen. Dies hilft, die Kontrolle über den Code zu behalten und unerwartete Probleme zu identifizieren.

  • Vermeide die Verwendung von Application.DisplayAlerts, da dies nur Rückfragen und keine tatsächlichen Fehlermeldungen betrifft.

  • Strukturiere deinen Code so, dass Fehlermeldungen schnell identifiziert und behoben werden können, um die Wartbarkeit zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Makro trotzdem funktioniert, auch wenn keine leeren Zellen vorhanden sind?
Verwende die CountBlank-Funktion, um zu überprüfen, ob leere Zellen vorhanden sind, bevor du die Löschoperation ausführst.

2. Funktioniert das auch in älteren Excel-Versionen?
Ja, die gezeigten VBA-Methoden funktionieren in den meisten Excel-Versionen, die VBA unterstützen.

3. Was mache ich, wenn ich mehrere Spalten gleichzeitig überprüfen möchte?
Du kannst die CountBlank-Überprüfung auf mehrere Spalten erweitern, indem du die Funktion entsprechend anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige