Использование IsError в If-Statement - PullRequest
1 голос
/ 24 февраля 2020

У меня есть следующее If -Statement:

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. Возможно ли это как-то обработать ошибку, как я пытался во втором фрагменте кода, без elseif и только с одним If утверждением?

  2. Почему If IsError(wb.Range("A1").Value) = True Or wb.Range("A1").Value = "n/a" не работает? VBA одновременно просматривает все Or условия, и одно из них возвращает ошибку, поэтому весь оператор If делает то же самое?

1 Ответ

1 голос
/ 24 февраля 2020

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" в другом случае.

См. this .

...