我正在尝试创建用于检查单元格填充颜色的代码。如果没有颜色,则代码应继续向前。如果有填充颜色,则代码应给出错误。
我有一个错误处理程序,它正在发送有关错误的电子邮件:
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
,因此逻辑不起作用
当前的问题是它一直都在出错。即使没有填充颜色的单元格也是如此。有什么可能是错误的?
答案 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