it-swarm.com.de

Schnellste Methode zum Löschen aller Blattinhalte VBA

Ich habe ein großes Blatt, von dem ich den gesamten Inhalt löschen muss. Wenn ich versuche, es einfach ohne VBA zu löschen, reagiert es nicht mehr. Bei Verwendung eines Makros wie:

Sub ClearContents ()
 Application.Calculation = XlManual
 Application.ScreenUpdating = False

  Sheets("Zeroes").Cells.ClearContents

 Application.ScreenUpdating = True
End Sub

Es reagiert auch nicht. Wie geht das am schnellsten?

42
hc91

Der .Cells-Bereich ist nicht auf diejenigen beschränkt, die verwendet werden. Ihr Code löscht daher den Inhalt von 1.048.576 Zeilen und 16.384 Spalten - insgesamt 17.179.869.184 Zellen. Das wird eine Weile dauern. Löschen Sie stattdessen einfach den UsedRange:

Sheets("Zeros").UsedRange.ClearContents

Alternativ können Sie das Blatt löschen und erneut hinzufügen:

Application.DisplayAlerts = False
Sheets("Zeros").Delete
Application.DisplayAlerts = True
Dim sheet As Worksheet
Set sheet = Sheets.Add
sheet.Name = "Zeros"
81
Comintern

Technisch und ausgehend von der von Comintern akzeptierten Problemumgehung glaube ich, dass Sie tatsächlich alle Zellen im Arbeitsblatt löschen möchten. Damit werden Formatierungen (Ausnahmen siehe Fußnote) usw. sowie der Zelleninhalt entfernt. Das heißt Sheets("Zeroes").Cells.Delete

In Kombination mit UsedRange, ScreenUpdating und Calculation Skipping sollte dies nahezu zeitnah erfolgen:

Sub DeleteCells ()
    Application.Calculation = XlManual
    Application.ScreenUpdating = False
    Sheets("Zeroes").UsedRange.Delete
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
End Sub

Oder wenn Sie es vorziehen, den Berechnungsstatus zu respektieren, befindet sich Excel derzeit in:

Sub DeleteCells ()
    Dim SaveCalcState
    SaveCalcState = Application.Calculation
    Application.Calculation = XlManual
    Application.ScreenUpdating = False
    Sheets("Zeroes").UsedRange.Delete
    Application.ScreenUpdating = True
    Application.Calculation = SaveCalcState
End Sub

Fußnote: Wenn die Formatierung für Entire Column angewendet wurde, wird sie nicht gelöscht. Dazu gehören Schriftfarbe, Füllfarbe und Rahmen, die Formatkategorie (wie Allgemein, Datum, Text usw.) und möglicherweise auch andere Eigenschaften

Bedingte Formatierung IS gelöscht, wie Entire Row Formatierung.

(Ganze Spalte Die Formatierung ist sehr nützlich, wenn Sie Rohdaten wiederholt in ein Blatt importieren, da sie den ursprünglich angewendeten Formaten entsprechen, wenn ein einfacher Import vom Typ "Nur Werte einfügen" durchgeführt wird.)

11
Stax

Sie können die .Clear-Methode verwenden:

Sheets("Zeros").UsedRange.Clear

Mit dieser Option können Sie das Inhalt und das Formatierung einer Zelle oder eines Bereichs entfernen, ohne den Rest des Arbeitsblatts zu beeinflussen.

5
Jones

Probier diese:

Sub clear_sht
  Dim sht As Worksheet
  Set sht = Worksheets(GENERATOR_SHT_NAME)
  col_cnt = sht.UsedRange.Columns.count
  If col_cnt = 0 Then
    col_cnt = 1
  End If

  sht.Range(sht.Cells(1, 1), sht.Cells(sht.UsedRange.Rows.count, col_cnt)).Clear
End Sub
0
Zernel