Excel 查找错误13中的If语句-类型错误

Excel 查找错误13中的If语句-类型错误,excel,vba,loops,if-statement,Excel,Vba,Loops,If Statement,我在DO列中有布尔值或#N/A值。如果真布尔值在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时,单元格不会变为

我在DO列中有布尔值或#N/A值。如果真布尔值在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值,只在找到真布尔值时更改相应的单元格颜色

我已经尝试重写上面的代码,以便首先处理真正的布尔值以及处理空格(使用application.sheet.isna(rRng))

任何提示都将不胜感激。

试试这个

Set r3FTop = Worksheets("mapOut").Range("X5, X2")
试试这个

Set r3FTop = Worksheets("mapOut").Range("X5, X2")
现在应该可以这样做了:

Sub toCheckOut()

Dim rCell As Range
Dim rRng As Range
Dim r3FTop As Range
Dim arr(1) as String
Dim i as Integer

i = 0

 ' check out check column
Set rRng = Worksheets("mapOut").Range("DO2:DO3")

arr(0) = "5"
arr(1) = "2"
'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
         Worksheets("mapOut").Range("X" & arr(i)).Interior.Color = RGB(237, 125, 49)
         i = i + 1
    Else
        GoTo Continue

    End If

Continue:

    Next rCell

End Sub
现在应该可以这样做了:

Sub toCheckOut()

Dim rCell As Range
Dim rRng As Range
Dim r3FTop As Range
Dim arr(1) as String
Dim i as Integer

i = 0

 ' check out check column
Set rRng = Worksheets("mapOut").Range("DO2:DO3")

arr(0) = "5"
arr(1) = "2"
'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
         Worksheets("mapOut").Range("X" & arr(i)).Interior.Color = RGB(237, 125, 49)
         i = i + 1
    Else
        GoTo Continue

    End If

Continue:

    Next rCell

End Sub

我认为问题在于,当您尝试使用一个单元格时,VBA知道要为哪个单元格着色,但当您尝试添加多个单元格时,VBA不知道要为哪个单元格着色,因为两个单元格中都没有提供映射。在这种情况下,我建议使用数组。使用条件格式是否会更容易?请尝试我的代码e回答,它应该可以工作。如果不注释它抛出错误的那行。@Gareth..我认为映射不是常数…就像2乘5…所以条件格式工作不起作用,因为没有为条件格式制定公式的选项。@Gareth我确实走了条件格式的路线,但是,我需要能够灵活地在初始橙色着色后,为单元格添加额外的背景色。这需要在瞬间完成,因此我没有时间清除每个单元格的条件格式,然后更改单元格颜色。我认为问题在于,当您尝试使用一个单元格时,VBA知道确切的单元格颜色,但当您正在尝试添加多个单元格,VBA不知道要为哪个单元格着色,因为这两个单元格中都没有提供映射。在这种情况下,我建议使用数组。使用条件格式不是更容易吗?试试我回答的代码,应该可以。如果不注释它引发错误的行。@Gareth..我认为映射不正确常量…如5后的2…因此条件格式设置不能作为制定条件格式设置公式的选项。@Gareth我确实采用了条件格式设置,但我需要灵活性,以便在初始橙色着色后,能够向单元格添加额外的背景色。这需要在一瞬间,因此我没有时间清除每个单元格的条件格式,然后更改单元格颜色。感谢您抽出时间为我的问题提供另一个答案。尽管如此,我仍然遇到相同的不匹配错误:如果rRng.Value=False,那么我认为即使是#N/A value应该由我的if语句的else部分拾取…感谢您抽出时间为我的问题提供另一个答案。尽管如此,我仍然在以下位置遇到相同的不匹配错误:if rRng.Value=False,那么我认为即使是#N/A值也应该由我的if语句的else部分拾取。