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?
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"
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.)
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.
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