如果范围没有填充颜色,则显示错误

时间:2019-11-11 19:20:09

标签: excel vba

我正在尝试创建用于检查单元格填充颜色的代码。如果没有颜色,则代码应继续向前。如果有填充颜色,则代码应给出错误。

我有一个错误处理程序,它正在发送有关错误的电子邮件:

    On Error GoTo ErrorHandlerColor

ErrorHandlerColor:

这是我的代码:

With ThisWorkbook.Worksheets("Main").Range("A2" & ThisWorkbook.Worksheets("Main").Range("L2").End(xlDown).Row)
    If IsNull(.DisplayFormat.Interior.ColorIndex) Then
    Else
      MsgBox 1 / 0
      Exit Sub

          End If
    End With

我的范围实际上是A2:L1343,但是随着它的变化,我将其设置为最后一行。

错误是指MsgBox 1 / 0,因此逻辑不起作用

当前的问题是它一直都在出错。即使没有填充颜色的单元格也是如此。有什么可能是错误的?

2 个答案:

答案 0 :(得分:3)

要查找最后一行,请参见This

@TimWilliams提到.ColorIndex = xlNone仅在单个单元格上确实可靠。因此,请使用.ColorIndex = xlColorIndexNone。这是您要尝试的吗? 这不需要循环

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = ThisWorkbook.Worksheets("Main")

    With ws
        lRow = .Range("L" & .Rows.Count).End(xlUp).Row

        If .Range("A2:L" & lRow).Interior.ColorIndex = xlColorIndexNone Then
            MsgBox "There is no color"
        Else
            MsgBox "There is color"
        End If
    End With
End Sub

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = ThisWorkbook.Worksheets("Main")

    With ws
        lRow = .Range("L" & .Rows.Count).End(xlUp).Row

        If .Range("A2:L" & lRow).DisplayFormat.Interior.ColorIndex = xlColorIndexNone Then
            MsgBox "There is no color"
        Else
            MsgBox "There is color"
        End If
    End With
End Sub

答案 1 :(得分:1)

VBA中几乎没有为空的内容,这些都是来自数据库服务器的查询结果。因此,IsNull()始终为 false 。 (Null values for variables in VBA

如果您在空的工作表上尝试以下代码,它将显示如何使用Range("A1").Interior.ColorIndex = xlColorIndexNone检查单元格中是否没有颜色:

Sub TestMe()

    With Worksheets(1).Range("A1")
        'True, because it is w/o color
        Debug.Print CBool(.Interior.ColorIndex = xlColorIndexNone)
        'always False
        Debug.Print IsNull(.Interior.Color)
        'changing interior to red
        .Interior.Color = vbRed
        'False, because it is red
        Debug.Print CBool(.Interior.ColorIndex = xlColorIndexNone)
         'always False
        Debug.Print IsNull(.Interior.Color)
    End With

End Sub