У меня есть большой лист, который должен удалить все содержимое. Когда я пытаюсь просто очистить его без VBA, он переходит в не отвечающий режим. При использовании макроса, например:
Sub ClearContents ()
Application.Calculation = XlManual
Application.ScreenUpdating = False
Sheets("Zeroes").Cells.ClearContents
Application.ScreenUpdating = True
End Sub
Он также не отвечает. Какой самый быстрый способ сделать это?
Диапазон .Cells не ограничивается теми, которые используются, поэтому ваш код очищает содержимое 1 048 576 строк и 16 384 столбца - 17 179 869 184 общих ячеек. Это займет некоторое время. Просто снимите UseRange вместо:
Sheets("Zeros").UsedRange.ClearContents
В качестве альтернативы вы можете удалить лист и снова добавить его:
Application.DisplayAlerts = False
Sheets("Zeros").Delete
Application.DisplayAlerts = True
Dim sheet As Worksheet
Set sheet = Sheets.Add
sheet.Name = "Zeros"
Технически, и из принятого Коминтерном обходного пути, я считаю, что вы действительно хотите удалить все ячейки в листе. Что удаляет форматирование (см. Сноску для исключений) и т.д., А также содержимое ячеек. Т.е. Sheets("Zeroes").Cells.Delete
В сочетании с пропуском UsedRange, ScreenUpdating и Calculation он должен быть почти неосторожным:
Sub DeleteCells ()
Application.Calculation = XlManual
Application.ScreenUpdating = False
Sheets("Zeroes").UsedRange.Delete
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub
Или, если вы предпочитаете соблюдать состояние расчета, Excel в настоящее время находится в:
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
Сноска. Если форматирование было применено ко всему столбцу, оно не удаляется. Сюда входят цвет шрифта, цвет заливки и границы, категория формата (например, "Общие", "Дата", "Текст" и т.д.) И, возможно, другие свойства, но
Условное форматирование удаляется, как и форматирование всей строки.
(Форматирование всего столбца весьма полезно, если вы постоянно импортируете необработанные данные на лист, поскольку оно будет соответствовать первоначально примененным форматам, если будет выполнен простой импорт типа Paste-Values-Only.)
Вы можете использовать метод .Clear:
Sheets("Zeros").UsedRange.Clear
Используя это, вы можете удалить содержимое и форматирование ячейки или диапазона, не затрагивая остальную часть рабочего листа.
Попробуйте следующее:
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