Excel 在If语句中使用IsError

Excel 在If语句中使用IsError,excel,vba,error-handling,Excel,Vba,Error Handling,我有以下If-语句: If wb.Range("A1").Value = "n/a" Or wb.Range("A1").Value = "na" Then wb.Range("A2").Value = "-" Else ... End 直到A1包含#NV(错误,它不是字符串)并且代码给了我错误13(类型不匹配),这一切都很正常。我试着这么做: If IsError(wb.Range("A1").Value) = True Or wb.Range("A1").Value = "

我有以下
If
-语句:

If wb.Range("A1").Value = "n/a" Or wb.Range("A1").Value = "na" Then
    wb.Range("A2").Value = "-"
Else
    ...
End
直到
A1
包含
#NV
(错误,它不是字符串)并且代码给了我错误13(类型不匹配),这一切都很正常。我试着这么做:

If IsError(wb.Range("A1").Value) = True Or wb.Range("A1").Value = "n/a" Or wb.Range("A1").Value = "na" Then
    wb.Range("A2").Value = "-"
Else
    ...
End
但同样,类型不匹配

如果我像这样分开它,它会工作:

If IsError(wb.Range("A1").Value) = True Then
    wb.Range("A2").Value = "-"
ElseIf wb.Range("A1").Value = "n/a" Or wb.Range("A1").Value = "na" Then
    wb.Range("A2").Value = "-"
Else
     ...
End
这给我带来了几个问题:

  • 是否可以像我在第二个代码段中尝试的那样,在没有
    elseif
    和只有一条
    If
    -语句的情况下,以某种方式处理错误

  • 为什么
    如果iError(wb.Range(“A1”)Value)=True或wb.Range(“A1”)Value=“n/a”
    不起作用?VBA是否同时查看所有
    条件,其中一个返回错误,因此整个
    If
    语句也会这样做

  • VBA不支持

    短路

    这就是为什么iError(wb.Range(“A1”)Value)=True或wb.Range(“A1”)Value=“n/a”或wb.Range(“A1”)Value=“na”无法工作的原因,因为它将检查所有条件

    最好将wb.Range(“A1”).Value=“n/a”或wb.Range(“A1”).Value=“na”放在elseif中


    请参阅。

    1。不,恐怕不可能<接受代码>iError(wb.Range(“A1”).Value)=True,但同一行还包含“wb.Range(“A1”).Value=“n/a”,编译器无法对其求值。。。2.正是由于我试图在上面解释的相同原因……您可以使用范围的
    Text
    属性,但速度较慢。