Подтвердить что ты не робот

Самый быстрый способ очистки содержимого всех листов VBA

У меня есть большой лист, который должен удалить все содержимое. Когда я пытаюсь просто очистить его без VBA, он переходит в не отвечающий режим. При использовании макроса, например:

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

  Sheets("Zeroes").Cells.ClearContents

 Application.ScreenUpdating = True
End Sub

Он также не отвечает. Какой самый быстрый способ сделать это?

4b9b3361

Ответ 1

Диапазон .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"

Ответ 2

Технически, и из принятого Коминтерном обходного пути, я считаю, что вы действительно хотите удалить все ячейки в листе. Что удаляет форматирование (см. Сноску для исключений) и т.д., А также содержимое ячеек. Т.е. 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.)

Ответ 3

Вы можете использовать метод .Clear:

Sheets("Zeros").UsedRange.Clear

Используя это, вы можете удалить содержимое и форматирование ячейки или диапазона, не затрагивая остальную часть рабочего листа.

Ответ 4

Попробуйте следующее:

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