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

Forumthread: VBA Tabellenbereich löschen

VBA Tabellenbereich löschen
29.05.2020 12:01:07
Peer
Hallo.
Ich weiß zwar, das meine Frage vielen ein Lächeln ins Gesicht zaubern wird, aber ich versuche trotzdem mal, sie zu stellen.
Was stimmt am Code nicht?
Public Sub TN_Loeschen()
Dim wks As Worksheet
Dim Bereich As Range
Dim loZ As Long
Set wks = Sheets("Teilnehmer")
loZ = wks.Cells(2, 1).End(xlUp).Row
Set Bereich = wks.Range(Cells(2, 1), loZ)
wks.Bereich.ClearContents
End Sub

Ich möchte mit diesem Sub den Inhalt der Tabelle "Teilnehmer" im Bereich ab Zeile 2 (Überschrift möchte ich behalten) löschen.
LG
Peer
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 12:06:46
MCO
Hallo Peer!
die Zeile
Set Bereich = wks.Range(Cells(2, 1), loZ)

verlangt nach 2 Zellen um den Bereich zu definieren. loZ ist aber nur eine Zahl.
Enweder definierst du loZ as range und schreibst

loZ = wks.Cells(2, 1).End(xlUp)
oder

Set Bereich = wks.Range(Cells(2, 1),Cells(loZ, 1))
Gruß, MCO
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 12:11:45
hary
Moin
Set Bereich = wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1))

Ohne wks vor Cells kann es in die Hose gehen.
oder nur so.
wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1)).ClearContents

gruss hary
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 12:35:11
Peer
Hallo hary.
Ich habe deine Antwort zu Herzen genommen, bekomme aber die Fehlermeldung "Anwendungs- oder Objektdefinierter Fehler" und bleibt bei Set Bereich hängen.
Public Sub TN_Loeschen()
Dim wks As Worksheet
Dim Bereich As Range
Dim loZ As Integer
Set wks = Sheets("Teilnehmer")
loZ = wks.Cells(2, 1).End(xlUp)
Set Bereich = wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1))
Bereich.ClearContents
'wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1)).ClearContents
End Sub

LG
Peer
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 12:44:39
hary
Moin
Da hast du dir einen Fehler eingebaut.
Verglei mal aus dem ersten Code
loZ = wks.Cells(2, 1).End(xlUp).Row

mit dem jetzigem
loZ = wks.Cells(2, 1).End(xlUp)

Was faellt dir auf? ;-))
Nimm anstatt Dim loZ As Integer --> Long
gruss hary
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 13:06:24
Peer

Public Sub TN_Loeschen()
Dim wks As Worksheet
Dim Bereich As Range
Dim loZ As Long
Set wks = Sheets("Teilnehmer")
loZ = wks.Cells(2, 1).End(xlUp).Row
Set Bereich = wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1))
Bereich.ClearContents
'wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1)).ClearContents
End Sub

bleibt trotzdem hängen.
LG
Peer
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 13:24:21
hary
Moin Peer
Hab hier noch mal die zeile fuer LoZ geaendert.
So laeuft er(getestet) durch.
Dim wks As Worksheet
Dim Bereich As Range
Dim loZ As Long
Set wks = Sheets("Teilnehmer")
loZ = wks.Cells(Rows.Count, 1).End(xlUp).Row '-- hier noch geaendert
Set Bereich = wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1))
Bereich.ClearContents

gruss hary
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 13:33:10
Peer
Ok, hary.
Es war also nur der Zeilenindex in der loZ Variablen.
Danke.
Aber wie kann ich erreichen, dass nicht nur der Inhalt die Spalte A gelöscht wird, sondern alle Zeilen aller Spalten?
Dies war ursprünglich mein Ziel.
Gruß
Peer
AW: mit EntireRow
29.05.2020 13:37:22
hary
Moin
Bereich.EntireRow.ClearContents

gruss hary
Anzeige
AW: mit EntireRow
29.05.2020 13:54:33
Peerli
Danke, hary.
Ich bin aktuell unterwegs und kann gerade nicht probieren. Es klingt aber nachvollziehbar.
LG
Peer
AW: mit EntireRow
29.05.2020 17:44:19
Peer
Hallo hary.
Bin jetzt daheim am PC und habe deinen Vorschlag gleich ausprobiert.
Er funktioniert.
Danke nochmals dafür.
Nun kommt bei mir gleich die nächste Frage auf, die ich aber in einem neuen Thread stellen möchte.
LG
Peer
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 12:21:53
Peer
Hallo MCO.
Danke für die schnelle Antwort.
Wenn man nochmal darauf gestoßen wird, sieht man es als logisch an.
Trotzdem kommt bei

wks.Bereich.ClearContents
eine Fehlermeldung "Objekt oder Methode nicht gefunden".
Ich habe der Deklaration von loZ Long in Integer zugewiesen. Aber kein Erfolg.
Woran kann dies liegen. Bereich ist doch deklariert und ihm einen Wert zugedacht.
Gruß
Peer
Anzeige
AW: VBA Tabellenbereich löschen
29.05.2020 12:25:29
peterk
Hallo
"Bereich" ist bereits ein Range der einem Worksheet zugeordnet ist, daher reicht

Bereich.ClearContents

;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Tabellenbereich Löschen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf einen der Einträge im Projektfenster und wähle Einfügen > Modul.

  3. Kopiere den folgenden Code:

    Public Sub TN_Loeschen()
        Dim wks As Worksheet
        Dim Bereich As Range
        Dim loZ As Long
        Set wks = Sheets("Teilnehmer")
        loZ = wks.Cells(Rows.Count, 1).End(xlUp).Row
        Set Bereich = wks.Range(wks.Cells(2, 1), wks.Cells(loZ, 1))
        Bereich.ClearContents
    End Sub
  4. Starte das Makro: Gehe zurück zu Excel, drücke ALT + F8, wähle TN_Loeschen und klicke auf Ausführen. Dies löscht den Inhalt im angegebenen Bereich.


Häufige Fehler und Lösungen

  • Fehler: "Anwendungs- oder objektdefinierter Fehler"

    • Lösung: Stelle sicher, dass du die Zeile für loZ korrekt definiert hast. Es sollte so aussehen:
      loZ = wks.Cells(Rows.Count, 1).End(xlUp).Row
  • Fehler: "Objekt oder Methode nicht gefunden"

    • Lösung: Ersetze wks.Bereich.ClearContents durch Bereich.ClearContents, da Bereich bereits als Range deklariert ist.

Alternative Methoden

Wenn du die gesamte Zeile oder einen anderen Bereich löschen möchtest, kannst du folgende Methoden verwenden:

  • Für das Löschen der gesamten Zeilen:

    Bereich.EntireRow.ClearContents
  • Für das Löschen eines spezifischen Bereichs:

    wks.Range("A2:A10").ClearContents

Praktische Beispiele

  • Beispiel 1: Löschen des Inhalts in einem definierten Bereich.

    wks.Range("B2:D10").ClearContents
  • Beispiel 2: Verwendung von Selection zum Löschen.

    Selection.ClearContents

Tipps für Profis

  • Nutze die With-Anweisung, um deinen Code zu optimieren:

    With wks
        .Range(.Cells(2, 1), .Cells(loZ, 1)).ClearContents
    End With
  • Achte darauf, dass die richtige Datenart verwendet wird (Long statt Integer für Zeilenindizes), um Überlauf-Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich einen Bereich in Excel löschen, ohne das gesamte Arbeitsblatt zu beeinflussen? Du kannst einen spezifischen Bereich mit Range("A1:A10").ClearContents löschen, um nur die Inhalte in diesen Zellen zu entfernen.

2. Was ist der Unterschied zwischen ClearContents und Delete? ClearContents löscht nur den Inhalt der Zellen, während Delete die Zellen selbst entfernt und die darunterliegenden Zellen nach oben verschiebt.

3. Kann ich die Methode auch für andere Excel-Versionen verwenden? Ja, der VBA-Code ist mit den meisten Excel-Versionen kompatibel. Stelle sicher, dass du die entsprechenden Objekte und Methoden verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige