Excel 如果范围没有填充颜色,则显示错误
我试图创建一个代码来检查单元格的填充颜色。如果没有颜色,代码应继续前进。如果有填充颜色,则代码应给出一个错误 我有一个错误处理程序,它正在发送关于错误的电子邮件:Excel 如果范围没有填充颜色,则显示错误,excel,vba,Excel,Vba,我试图创建一个代码来检查单元格的填充颜色。如果没有颜色,代码应继续前进。如果有填充颜色,则代码应给出一个错误 我有一个错误处理程序,它正在发送关于错误的电子邮件: On Error GoTo ErrorHandlerColor ErrorHandlerColor: 这是我的密码: With ThisWorkbook.Worksheets("Main").Range("A2" & ThisWorkbook.Worksheets("Main").Range("L2").End(x
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
,但随着它的变化,我将其设置到最后一行
我所说的错误是指msgbox1/0
,因此逻辑不起作用
目前的问题是,它总是给出一个错误。即使没有填充颜色的单元格。可能有什么问题 VBA中很少有东西是Null——这些都是来自数据库服务器的查询结果。因此,
IsNull()。()
如果在空工作表上尝试以下代码,它将显示如何检查具有范围(“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
VBA中很少有Null——这些都是来自数据库服务器的查询结果。因此,IsNull()。()
如果在空工作表上尝试以下代码,它将显示如何检查具有范围(“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
要查找最后一行,请参见
正如@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
或
要查找最后一行,请参见
正如@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
或
错误是什么?.ColorIndex=xlNone
会告诉您单元格是否有阴影,但这仅在单个单元格上才是真正可靠的此工作簿。工作表(“Main”).Range(“L2”).End(xlDown.Row)
返回一行,因此您会得到类似.Range(“A2”&
,而您需要.Range(“A2:L”&
发生了什么错误?.ColorIndex=xlNone
会告诉您单元格是否有阴影,但这仅在单个单元格上才是真正可靠的此工作簿。工作表(“Main”).Range(“L2”).End(xlDown).Row
返回一行,因此您会得到类似于范围(“A2”)和
的内容,而您需要范围(“A2:L”&
填充白色!=否fill@chrisneilsen-我没有领会你的意思。如果我打开一个新的Excel并在即时窗口中写入?activecell.Interior.Color=256^3-1
,它会给出true。虽然你说的是true,但它没有领会你的意思。OP正在寻找设置为不填充的单元格。你的测试没有区分不填充和填充led为白色。您需要使用颜色索引来执行此操作。填充为白色!=否fill@chrisneilsen-我没有领会你的意思。如果我打开一个新的Excel并在即时窗口中写入?activecell.Interior.Color=256^3-1
,它会给出true。虽然你说的是true,但它没有领会你的意思。OP正在寻找设置为不填充的单元格。你的测试没有不要区分无填充和填充白色。要做到这一点,您需要ColorIndex。这是关于xlNone
vsxlColorIndexNone
-两者都是命名常量,都有值-4142,因此从逻辑上讲,使用其中一个或另一个没有区别。(也就是说,xlColorIndexNone
是Excel.XlColorIndex
的成员,因此它是上下文上“正确”的一个)。值得注意的是:Tim关于.ColorIndex=xlNone
的观点仅在单个单元格上是可靠的,因为只有当范围内的所有单元格都具有相同的颜色(可能是xlNone/xlColorIndexNone)时,它才会返回颜色值。如果范围内有多个颜色,它将返回Null
。(这就是无循环代码工作的原因)关于xlNone
与xlColorIndexNone
的重点-两者都是命名常量,都有-4142的值,因此从逻辑上讲,使用其中一个或另一个没有区别。(也就是说,xlColorIndexNone
是Excel.XlColorIndex
的成员,因此它是上下文索引“正确”一个使用)。有趣的是:Tim关于.ColorIndex=xlNone
的观点仅在单个单元格上是真正可靠的,这与以下事实有关:只有当范围内的所有单元格都具有相同的颜色(可能是xlNone/xlColorIndexNone)时,它才会返回颜色值。如果范围中有多个颜色,则返回Null
(这就是无循环代码工作的原因)