Excel 循环使用白色填充的所有单元格,并将其更改为“无填充”
我有一个巨大的电子表格。我想在所有单元格中循环,并将白色填充改为无填充。这段代码要么太长,要么使我的计算机崩溃,所以我无法判断它是否真的工作。有人看到它有什么问题吗Excel 循环使用白色填充的所有单元格,并将其更改为“无填充”,excel,vba,Excel,Vba,我有一个巨大的电子表格。我想在所有单元格中循环,并将白色填充改为无填充。这段代码要么太长,要么使我的计算机崩溃,所以我无法判断它是否真的工作。有人看到它有什么问题吗 Sub Remove_White_Cells() Application.ScreenUpdating = False Dim cell As Range Dim wb As Workbook Dim ws As Worksheet For Each ws In ActiveWorkbo
Sub Remove_White_Cells()
Application.ScreenUpdating = False
Dim cell As Range
Dim wb As Workbook
Dim ws As Worksheet
For Each ws In ActiveWorkbook
For Each cell In Worksheets
If cell.Interior.Color = RGB(0, 0, 0) Then
cell.Interior.Color = xlNone
End If
Next cell
Next ws
End Sub
首先,在每个工作表的每个单元格中循环的代码效率极低。出于这个原因,我将使用
.UsedRange
将其限制为使用的单元格
结果如下:
Sub Remove_White_Cells()
Application.ScreenUpdating = False
Dim cell As Range
Dim wb As Workbook
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets 'Worksheet iterator
For Each cell In ws.UsedRange.Cells 'Select only used cells
If cell.Interior.Color = RGB(0, 0, 0) Then
cell.Interior.Color = xlNone
End If
Next cell
Next ws
Application.ScreenUpdating = True
End Sub
用于工作表中的每个单元格。UsedRange
由于您使用变量ws
在每个工作表中循环,因此您应该对ws中的每个单元格使用。UsedRange
此外,停止自动重新计算可以加快速度。将此添加到代码的开头:Dim SaveCalcState SaveCalcState=Application.Calculation Application.Calculation=XlManual
,并将此添加到结尾:Application.Calculation=SaveCalcState
您不能使用ActiveSheet
遍历单元格,这就是为什么当您告诉VBA在ActiveSheet
中迭代时,对象不支持此属性或方法的原因,它不会自动知道您正在谈论单元格。这就是为什么您必须将对象更改为UsedRange
,这是一种范围
类型。然后VBA知道您想要遍历单元格。工作表中有超过170亿个单元格。你绝对不想把它们都处理掉。这就是UsedRange所避免的。:-)