Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 循环使用白色填充的所有单元格,并将其更改为“无填充”_Excel_Vba - Fatal编程技术网

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所避免的。:-)