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

ClearContents für mehrere Tabellenblätter LF 1004

Forumthread: ClearContents für mehrere Tabellenblätter LF 1004

ClearContents für mehrere Tabellenblätter LF 1004
18.08.2017 10:39:22
Anna
Hallo zusammen,
ich habe folgendes Problem:
Für ein Sub, das ich geschrieben habe werden Ergebnisse in vier verschiedenen Tabellenblättern _
einer Datei ausgegeben. Deshalb möchte ich am Anfang der Sub die jeweiligen Inhalt der Tabellenblätter löschen, damit immer die "aktuellen" Ergebnisse _
zu sehen sind. Der Ergebnisbereich ist variabel, deshalb die Ansprache mit .End(xlDown) bzw. .End(xlToRight)
Hier mein Code:

Sub testlöschen()
Worksheets("ComStrom").Range(Range("B2"), Range("B2").End(xlDown).End(xlToRight)). _
ClearContents
Worksheets("Reststrom").Range(Range("B2"), Range("B2").End(xlDown).End(xlToRight)). _
ClearContents
Worksheets("ErlösComStrom").Range(Range("B2"), Range("B2").End(xlDown).End(xlToRight)). _
ClearContents
Worksheets("Einspeisung").Range(Range("B2"), Range("B2").End(xlDown)).ClearContents
End Sub

Jede Programmierzeile einzeln funktioniert, aber wenn ich alle vier Tabellenblätter auf einmal löschen möchte, bekomme ich den Laufzeitfehler 1004 (Anwendungs- oder objektdefinierter Fehler).
Zu dem Laufzeitfehler habe ich nur Anmerkungen über verbundene Zellen gefunden, die habe ich in den betreffenden Tabellenblättern definitiv nicht.
Auch, wenn ich vorher über .Select das betreffende Tabellenblatt anspreche, bekomme ich den gleichen Fehler.
Sub testlöschen()
Worksheets("ComStrom").Range(Range("B2"), Range("B2").End(xlDown).End(xlToRight)).Select
Selection.ClearContents
Worksheets("Reststrom").Range(Range("B2"), Range("B2").End(xlDown).End(xlToRight)).Select
Selection.ClearContents
End Sub

Hat jemand eine Idee, woran das liegen könnte?
Schon einmal vielen Dank!
Anna
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ClearContents für mehrere Tabellenblätter LF 1004
18.08.2017 11:23:39
Piet
Hallo,
der Fehler ist sehr einfach, für Anfaenger aber vielleicht schser zu verstehen! - PCs können nicht denken!
Der Code so wie du ihn aufgebaut hast funktioniert nur wenn das Aktive Blatt mit dem Worksheet Namen übereinstimmt!
Der Grund ist hier zu finden... - Range("B2").End(xlDown)
Wenn vor Range("B2") keine Tabelle angegeben wird versteht Excel es so, das er die Endzelle im gerade -Aktiven Blatt- suchen soll. Das trifft aber nur auf eine Tabelle zu! Bei den anderen Tabellen kommt es zu einem Adressfehler!! Das Löschen funktioniert garnicht ober waere unkorrekt, mit einer falscher End-Adresse.
Abhilfe sind die von mir gemachte n Vorschlaege. Welchen du benutzt ist dabei egal!
Eine Zelle mit Select anspringen geht auch nur dann, wenn das AktiveSheet mit dem Worksheets.Namen übereinstimmt!!
Man beachte die Feinheiten bei Excel!!
mfg Piet
Sub testlöschen()
Dim CStrom As Worksheet, RStrom As Worksheet
Set CStrom = Worksheets("ComStrom")
Set RStrom = Worksheets("RestStrom")
'Lösung über Set Anweisung
CStrom.Range(Range("B2"), CStrom.Range("B2").End(xlDown).End(xlToRight)).ClearContents
'Lösung über Worksheet("ComStrom")
Worksheets("ComStrom").Range(Range("B2"), Worksheets("ComStrom").Range("B2").End(xlDown). _
End(xlToRight)).ClearContents
'Lösung über With Klammer)
With Worksheets("ComStrom")
.Range(.Range("B2"), .Range("B2").End(xlDown).End(xlToRight)).ClearContents
End With
'hier kommt unweigerlich Laufzeitfehler !!
'** wenn das Aktive Blatt  "RestStrom" ist !!
Worksheets("Reststrom").Range(Range("B2"), Range("B2").End(xlDown).End(xlToRight)). _
ClearContents
End Sub

Anzeige
AW: ClearContents für mehrere Tabellenblätter LF 1004
18.08.2017 13:02:28
Werner
Hallo Anna,
die Grundlagen hast du ja von Piet. Hier jetzt ein Code mit einer Schleife über die Blätter.
Public Sub Löschen()
For Each Worksheet In ThisWorkbook.Worksheets
Select Case Worksheet.Name
Case "ComStrom", "Reststrom", "ErlösComStrom", "Einspeisung"
With Worksheet
.Range(.Range("B2"), .Range("B2").End(xlDown).End(xlToRight)).ClearContents
End With
Case Else
End Select
Next
End Sub
Gruß Werner
Anzeige
ClearContents für mehrere Tabellenblätter LF 1004
18.08.2017 14:12:53
Anna
Hallo ihr beiden,
vielen Dank! Das klingt logisch. Ich dachte mir schon, dass es etwas damit zu tun hat, dass man sich im falschen Tabellenblatt befindet, aber dass man innerhalb einer Range, das Worksheet zweimal angeben muss, darauf bin ich nicht gekommen.
Vielen Dank! Jetzt funktioniert es.
Ein schönes Wochenende euch beiden
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
18.08.2017 14:16:50
Werner
Anzeige
Anzeige

Infobox / Tutorial

ClearContents für mehrere Tabellenblätter in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Inhalt mehrerer Tabellenblätter in Excel mit VBA zu löschen, kannst du folgende Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (ALT + F11).
  2. Erstelle ein neues Modul (Rechtsklick auf „VBAProject“ > „Einfügen“ > „Modul“).
  3. Füge den folgenden Code ein, um den Inhalt der gewünschten Tabellenblätter zu löschen:
Sub testlöschen()
    Dim CStrom As Worksheet, RStrom As Worksheet
    Set CStrom = Worksheets("ComStrom")
    Set RStrom = Worksheets("Reststrom")

    CStrom.Range(CStrom.Range("B2"), CStrom.Range("B2").End(xlDown).End(xlToRight)).ClearContents
    RStrom.Range(RStrom.Range("B2"), RStrom.Range("B2").End(xlDown).End(xlToRight)).ClearContents
    Worksheets("ErlösComStrom").Range(Worksheets("ErlösComStrom").Range("B2"), Worksheets("ErlösComStrom").Range("B2").End(xlDown).End(xlToRight)).ClearContents
    Worksheets("Einspeisung").Range(Worksheets("Einspeisung").Range("B2"), Worksheets("Einspeisung").Range("B2").End(xlDown)).ClearContents
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus (F5 oder über das Menü „Entwicklertools“).

Häufige Fehler und Lösungen

Ein häufiger Fehler, der beim Ausführen des Codes auftreten kann, ist der Laufzeitfehler 1004. Dieser Fehler tritt auf, wenn Excel nicht auf die angegebene Zelle zugreifen kann. Hier sind einige Lösungen:

  • Verwende die vollständige Referenz für Range: Stelle sicher, dass du die Arbeitsblätter direkt in der Range-Anweisung angibst, um Missverständnisse zu vermeiden.

  • Aktives Blatt berücksichtigen: Der Fehler kann auch auftreten, wenn das aktive Blatt nicht mit dem angegebenen Arbeitsblatt übereinstimmt. Achte darauf, dass du das richtige Blatt ausgewählt hast.

  • Verbundene Zellen vermeiden: Vergewissere dich, dass in den zu löschenden Bereichen keine verbundenen Zellen vorhanden sind.


Alternative Methoden

Eine effektive Methode, um den Inhalt mehrerer Tabellenblätter zu löschen, ist die Verwendung einer Schleife. Hier ist ein Beispiel:

Public Sub Löschen()
    For Each ws In ThisWorkbook.Worksheets
        Select Case ws.Name
            Case "ComStrom", "Reststrom", "ErlösComStrom", "Einspeisung"
                With ws
                    .Range(.Range("B2"), .Range("B2").End(xlDown).End(xlToRight)).ClearContents
                End With
        End Select
    Next ws
End Sub

Diese Schleife überprüft jedes Arbeitsblatt und löscht nur den Inhalt der definierten Blätter.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung von .ClearContents in verschiedenen Szenarien:

  • Löschen eines bestimmten Bereichs:
Worksheets("Tabelle1").Range("A1:A10").ClearContents
  • Löschen aller Inhalte in einem Arbeitsblatt:
Worksheets("Tabelle1").Cells.ClearContents
  • Verwendung von .End(xlToRight): Um die rechte untere Ecke eines Datenbereichs zu bestimmen:
Worksheets("Tabelle1").Range("B2", Range("B2").End(xlDown).End(xlToRight)).ClearContents

Tipps für Profis

  • Verwende Option Explicit: Füge am Anfang deines Moduls Option Explicit hinzu, um sicherzustellen, dass du alle Variablen deklarierst. Das hilft, Fehler zu vermeiden.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um Laufzeitfehler elegant abzufangen. Beispiel:

On Error Resume Next
  • Makros dokumentieren: Kommentiere deinen Code, damit andere (oder du selbst in der Zukunft) verstehen, was jeder Teil des Codes macht.

FAQ: Häufige Fragen

1. Wie kann ich den Inhalt eines gesamten Arbeitsblattes löschen? Du kannst den folgenden Befehl verwenden, um alle Inhalte eines Arbeitsblatts zu löschen:

Worksheets("NameDesBlattes").Cells.ClearContents

2. Was ist der Unterschied zwischen .ClearContents und .Clear? .ClearContents löscht nur die Inhalte, während .Clear auch Formatierungen und Kommentare entfernt.

3. Wie kann ich einen bestimmten Bereich innerhalb eines Arbeitsblatts auswählen? Verwende die Range-Methode, um einen spezifischen Bereich innerhalb eines Arbeitsblatts auszuwählen, z. B.:

Worksheets("Tabelle1").Range("A1:C10").Select

4. Warum funktioniert mein Code nur im aktiven Blatt? Wenn du Range ohne das spezifische Arbeitsblatt angibst, verwendet Excel standardmäßig das aktive Blatt. Stelle sicher, dass du das Arbeitsblatt in deinem Code immer angibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige