【问题标题】:If statement within look error 13 - type error查找错误 13 中的 if 语句 - 类型错误
【发布时间】: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


【解决方案1】:

现在应该可以工作了:

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

【讨论】:

  • 感谢您抽出宝贵时间为我的问题提供替代答案。尽管上面我仍然遇到相同的不匹配错误: If rRng.Value = False Then 我认为即使是 #N/A 值也应该被我的 if 语句的 else 部分拾取。 . .
【解决方案2】:

试试这个

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

【讨论】:

    猜你喜欢
    • 2013-07-29
    • 2021-09-22
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多