我需要一个快速代码来清理所有空单元格的格式。 我写了这段代码,但速度太慢了。有没有办法让它更快?
Sub removeFormatEmpty()
'Declaration of variables
Dim sheet As Worksheet
Dim rcell As Range
For Each sheet In Worksheets
sheet.Activate
'Cells.UnMerge
For Each rcell In sheet.UsedRange.Cells
If rcell.MergeCells = True Then
rcell.UnMerge
End If
If rcell.Value = "" Then
rcell.ClearFormats
End If
Next rcell
Next sheet
End Sub
这段代码有效,但由于需要逐个单元格,因此速度很慢。有没有办法选择除具有内容的单元格以外的整个范围?
更新: 感谢bobajob和jordan的评论我已经能够更新代码并使其更快更优化。这是新代码:
Sub removeFormatEmptyImproved()
Dim sheet As Worksheet
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For Each sheet In Worksheets
'sheet.Activate
sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats
Next sheet
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
所以现在它已经解决了。
答案 0 :(得分:1)
首先,在取消合并之前,您无需检查单元格是否合并。所以要在sheet
...
sheet.UsedRange.UnMerge
您无需在更改工作表之前激活工作表
如评论中所述,您可以使用
一次更改所有单元格sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats
将Calculation
变为手动,ScreenUpdating
变为false是一种简单易用的方法,可以加速大多数VBA代码!
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
' <other code>
' Include error handling so that these are always set back!
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
因此,您生成的Sub
将是
Sub removeFormatEmpty()
Dim sheet As Worksheet
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For Each sheet In ThisWorkbook.Worksheets
sheet.UsedRange.UnMerge
sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats
Next sheet
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
加快进度的最后一步是深入了解UsedRange
。记住长期未使用的细胞并且远远超过必要的细胞可能是臭名昭着的。如果您知道表格布局,可能有办法限制您使用的范围。
在此处查看一些执行此操作的方法: Getting the actual usedrange