Во-первых, нет предопределенного идентификатора с именем vbUndefined
, как, по-видимому, подразумевается в настоящее время принятым ответом. Этот код работает только тогда, когда в верхней части скрипта нет Option Explicit
. Если вы еще не используете Option Explicit
, тогда начните делать это, это избавит вас от всякого горя.
Значение, которое вы можете использовать вместо vbUndefined
, равно Empty
, например: -
If arr(x) = Empty Then ...
Empty
является предопределенным идентификатором и является значением по умолчанию для переменной или элемента массива, которому еще не присвоено значение.
Однако есть Готча, на который стоит обратить внимание. Следующие операторы отображают true: -
MsgBox 0 = Empty
MsgBox "" = Empty
MsgBox CDate("30 Dec 1899") = True
Следовательно, если вы ожидаете, что какое-либо из этих значений будет допустимым определенным значением элемента массива, тогда сравнение с Empty не обрезает его.
Если вы действительно хотите быть уверены, что элемент действительно «неопределенный», то есть «пустой», используйте функцию IsEmpty
: -
If IsEmpty(arr(x)) Then
IsEmpty
вернет истину только в том случае, если параметр действительно корректен Empty
.
Существует также другая проблема, Null
- это возможное значение, которое может храниться в массиве или переменной. Однако: -
MsgBox Null = Empty
Ошибка во время выполнения, «недопустимое использование нуля» и: -
MsgBox IsEmpty(Null)
ложно. Поэтому вам нужно решить, означает ли Null
неопределенное значение или является допустимым значением. Если Null
также означает undefined, вам нужно, чтобы ваш оператор If
выглядел так: -
If IsEmpty(arr(x)) Or IsNull(arr(x)) Then ....
Вы можете отказаться от этого, если знаете, что Null
никогда не будет назначено в массив.