0

目前有一个包含大量 If 语句的宏,这些语句遍历每一行并测试某些条件。需要添加到每个 if 语句的条件之一如下:如果 c1(我将其作为范围进行了暗化)=“#N/A”)。在问了几个人之后,我终于在我的每个 if 语句之前添加了正确的代码行作为另一个条件:

  If CVErr(cl.Value) = CVErr(xlErrNA) And 

不幸的是,当 cl.Value 不是“#N/A”时,这会一直搞砸。我想看看是否有一种方法可以启动宏,例如 Do While 或通过测试 cl.Value 是否为“#N/A”以及它是否通过所有其他 IF 来启动它语句,如果没有,则转到下一个单元格。请指教。谢谢你的帮助。

这只是一个快速示例/查看 4 If 语句,我添加了上面的行来测试“#N/A”,这会导致错误(说 13:类型不匹配)。

For Each cl In range("A2", range("A" & Rows.count).End(xlUp))


 If CVErr(cl.Value) = CVErr(xlErrNA) And _
 cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 2).Value Like "*CLO*" Then
        cl.Value = "CLO"
 End If

 If CVErr(cl.Value) = CVErr(xlErrNA) And cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 12).Value Like "BCC*" Then
        c1.Value = "CLO"
 End If

 If CVErr(cl.Value) = CVErr(xlErrNA) And _
 cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 14).Value Like "*CLO*" Then
        c1.Value = "CLO"
 End If

 If CVErr(cl.Value) = CVErr(xlErrNA) And _
 cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 15).Value Like "*CLO*" Then
        c1.Value = "CLO"
 End If
4

1 回答 1

1

#N/A是工作表中的特殊错误值,而不是字符串。

您可以使用以下方法对其进行测试:

If WorksheetFunction.Iserror(cl.Offset(0, 0).Value) ...

对于任何错误,这将返回 TRUE。如果您想专门针对 进行测试#N/A,请使用函数 ISNA(...) 执行相同的操作。

关于您修改后的问题,如果我理解正确,为什么不能将您的其他 IF 包含在 NA IF 中?

For ...
    If (CVErr(cl..Value)  eq CVErr(xlErrNA) Then
        If .... Then
            do_something
        End If
        If .... Then
            do_another_thing
        End If
    End If
Next

请注意,代码草图第二行的eq应该是等号。我在我的手机上写这个,没有那个键:(

于 2013-07-05T19:33:56.723 回答