清除所有表格内容VBA的最快方法

hc9*_*c91 43 excel vba excel-vba

我有一张大纸,我需要删除所有的内容.当我尝试在没有VBA的情况下简单地清除它时,它进入无响应模式.使用宏时,例如:

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

  Sheets("Zeroes").Cells.ClearContents

 Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)

它也没有回应.最快的方法是什么?

Com*_*ern 84

.Cells范围不限于正在使用的范围,因此您的代码清除1,048,576行和16,384列的内容 - 17,179,869,184个单元格.这需要一段时间.只需清除UsedRange:

Sheets("Zeros").UsedRange.ClearContents
Run Code Online (Sandbox Code Playgroud)

或者,您可以删除工作表并重新添加它:

Application.DisplayAlerts = False
Sheets("Zeros").Delete
Application.DisplayAlerts = True
Dim sheet As Worksheet
Set sheet = Sheets.Add
sheet.Name = "Zeros"
Run Code Online (Sandbox Code Playgroud)

  • 面向未来的读者,如果它是工作簿中的最后一个/唯一一个,则无法删除工作表.在这种情况下,您可以先添加新的空白页,删除旧的空白页,最后将该新表重命名为旧表的名称. (8认同)
  • 另请注意,消除工作表将与引用最近消除的工作表的其他工作表中的公式产生冲突,重新创建工作表可能无法解决该问题. (2认同)

Sta*_*tax 11

从技术上讲,从Comintern公认的解决方法来看,我相信您实际上想删除工作表中的所有单元格.其中删除格式化(参见脚注的例外)等,以及单元格内容.即 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
Run Code Online (Sandbox Code Playgroud)

或者,如果您更愿意尊重计算状态,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
Run Code Online (Sandbox Code Playgroud)

脚注:如果对整列应用了格式,则不会删除它.这包括字体颜色,填充颜色和边框,格式类别(如常规,日期,文本等)以及可能的其他属性,但

删除条件格式,整行格式也是如此.

(如果要将原始数据重复导入工作表,则整列格式化非常有用,因为如果完成简单的仅粘贴值类型导入,它将符合最初应用的格式.)


小智 5

您可以使用.Clear方法:

Sheets("Zeros").UsedRange.Clear
Run Code Online (Sandbox Code Playgroud)

使用此功能,您可以删除单元格或范围的内容格式,而不会影响工作表的其余部分。