(VBA)用于清除可变范围单元格的循环

我正在尝试创建一个子例程,如果单元格满足某些参数,该例程将清除单元格内容。我以为这很简单,但似乎比我想的要复杂。

以下是要求:

a)该功能需要通过选择单元格E4至I4来启动

b)必须清除单元格中的所有内容,除非单元格已变色。

c)每次迭代,行NUMber上升,列保持不变。

我附上了我编写的代码,以及我负责更新的“旧代码”。如您所见,我正在尝试使新代码比旧代码更智能(旧代码清除了静态范围的单元格)。

我尝试使用一些不同的循环语句,每次都遇到某种错误。有了这段代码,我没有收到错误(很好!),但是它似乎对目标工作表没有任何作用。运行此:(

之后,所有单元格仍然充满数据

Sub Clear ()

    target = activeSheet.Name  ' Day Sheet
    Sheets(target).Select
    For counter = 4 To 1000
        If Range("e" & counter,"i" & counter).Interior.ColorIndex <> xlColorIndexNone Then
            Range("e" & counter,"i" & counter).ClearContents
            Exit For
        End If
    Next

End Sub

'This is the OLD CODE,that has been proven to work:

Sub Clear()
'
    target = activeSheet.Name  ' Day Sheet
    Sheets(target).Select
    Range("c4:i29").Select
    Selection.ClearContents
    Application.CutCopyMode = False
End Sub

我希望新代码能正常工作,或者清除超出要求的行,但是似乎什么也没做。屏幕闪烁一瞬间,所以我知道代码可以运行,但没有实际效果。欢迎任何帮助,非常感谢!!!

opencore 回答:(VBA)用于清除可变范围单元格的循环

嗯,这是一个可能的解决方案(假设您需要清空所有未着色的单元格):

Sub Test()

Application.FindFormat.Clear
Application.FindFormat.Interior.Color = xlColorIndexNone

With Sheet1 'Replace with your Sheet's CodeName
    .Range("E4:I1000").Replace What:="*",Replacement:="",SearchFormat:=True,ReplaceFormat:=False
End With

End Sub

也许您想在遇到第一个彩色单元格后根据设计Exit For。当前,您只需要针对xlColorIndexNone检查E-I列的整个范围。而且只有当所有这些都不相同时,您才会满足您的要求,它将继续进行ClearContents。我想这就是为什么您的代码当前“不起作用”(实际上是起作用)的原因,因为它可能永远不会正确。此外,请注意,一旦上述陈述为真,您的Exit For将停止迭代。

本文链接:https://www.f2er.com/3157806.html

大家都在问