【发布时间】:2019-05-29 08:17:39
【问题描述】:
我在 DO 列中有布尔值或 #N/A 值。如果 True 布尔值在 DO 列范围内,我希望根据我的代码将范围 r3FTop 中的相应单元格更改为颜色。我的想法是DO2单元对应X5,D03对应X2。
当我用
运行这段代码时Set rRng = Worksheets("mapOut").Range("DO2:DO2") and
Set r3FTop = Worksheets("mapOut").Range("X5")
代码工作正常(当 DO2 处的单元格值为 True 时,单元格变为橙色,而当单元格值为 False 或 #N/A 时不变为橙色)。但是,在每个范围(DO3 和 X2)中添加下一个单元格时,我不断收到类型 13 错误。
我已经尝试了第一行的底部,它完美地为 X5 处的单元格着色。当我尝试将第二个单元格添加到范围时遇到问题。
为了便于使用,我选择将我希望在屏幕上显示的组中着色的单元格引用批量化。
Sub toCheckOut()
Dim rCell As Range
Dim rRng As Range
Dim r3FTop As Range
' check out check column
Set rRng = Worksheets("mapOut").Range("DO2:DO3")
Set r3FTop = Worksheets("mapOut").Range("X5", "X2")
For Each rCell In rRng.Cells
If rRng.Value = False Then
GoTo Continue
ElseIf rRng.Value = True Then
r3FTop.Interior.Color = RGB(237, 125, 49)
Else
GoTo Continue
End If
Continue:
Next rCell
End Sub
我的实际列范围是 DO2:DO90,我也有 r3FTop 变量的相应单元格值。我希望代码继续运行,忽略 #N/A 或 False 值,仅在找到 True 布尔值时更改相应的单元格颜色。
我已经尝试重写上面的代码,以便首先处理 True 布尔值,就像处理空白一样(使用 application.worksheet.isna(rRng)。
任何指针将不胜感激。
【问题讨论】:
-
我认为问题在于,当您尝试使用一个单元格时,VBA 知道要为哪个单元格着色,但是当您尝试添加多个单元格时,VBA 不知道要为哪个单元格着色两个单元格都没有提供映射。在这种情况下,我会建议使用数组。
-
使用条件格式不是更容易吗?
-
试试我回答的代码,应该可以的。如果不注释它会引发错误的行。
-
@Gareth .. 我认为映射不是恒定的...就像 5 后的 2 .... 所以条件格式无法正常工作,因为无法为条件格式制定公式。跨度>
-
@Gareth 我确实走上了条件格式的路线,但是我需要能够在初始橙色着色后向单元格添加其他背景颜色的灵活性。这需要立即完成,所以我没有时间清除每个单元格的条件格式,然后更改单元格颜色。
标签: excel vba loops if-statement