【问题标题】:Using IsError in If-Statement在 If 语句中使用 IsError
【发布时间】:2020-02-24 10:19:49
【问题描述】:

我有以下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

这给我带来了几个问题:

  1. 是否可以像我在第二个代码 sn-p 中尝试的那样处理错误,没有elseif,只有一个If-语句?

  2. 为什么If IsError(wb.Range("A1").Value) = True Or wb.Range("A1").Value = "n/a" 不起作用? VBA 是否同时查看所有Or 条件并且其中一个返回错误,所以整个If 语句是否相同?

【问题讨论】:

  • 1.不,恐怕这是不可能的。 IsError(wb.Range("A1").Value) = True 被接受,但同一行还包含编译器无法评估的 `wb.Range("A1").Value = "n/a"'... 2. 正是因为我试图上面解释...
  • 您可以改用范围的Text 属性,但速度较慢。

标签: excel vba error-handling


【解决方案1】:

VBA 不支持

短路

这就是IsError(wb.Range("A1").Value) = True Or wb.Range("A1").Value = "n/a" Or wb.Range("A1").Value = "na" 不起作用的原因,因为它会检查所有条件。

最好把wb.Range("A1").Value = "n/a" Or wb.Range("A1").Value = "na"放在elseif中。

请参考this。

【讨论】:

    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2014-09-30
    • 2021-07-16
    • 2018-09-16
    • 2015-12-15
    • 2015-09-28
    相关资源
    最近更新 更多