В ближайшем окне вы можете использовать следующее:
?Result Is Nothing
?IsNull( Result )
?IsEmpty( Result )
?IsMissing( Result )
Первое просто для полноты. Поскольку Result не является объектом, Result Is Nothing
выдаст ошибку. Empty
для вариантов, которые не были инициализированы , включая массивы, которые не были измерены. .
(Обновление) При выполнении некоторой дополнительной проверки я обнаружил, что IsEmpty никогда не вернет true в объявленном массиве (независимо от того, был ли Redim или нет) только с одним исключением. Единственное исключение, которое я обнаружил, - это когда массив объявляется на уровне модуля, а не как Public, и только тогда, когда вы проверяете его в ближайшем окне.
Missing
если для необязательных значений передаются функции или подпрограмме. Хотя вы не можете объявить Optional Foo() As Variant
, у вас может быть что-то вроде ParamArray Foo() As Variant
, и в этом случае, если ничего не передано, IsMissing
вернет true.
Таким образом, единственный способ определить, инициализирован ли массив, - написать процедуру, которая проверила бы:
Public Function IsDimensioned(vValue As Variant) As Boolean
On Error Resume Next
If Not IsArray(vValue) Then Exit Function
Dim i As Integer
i = UBound(Bar)
IsDimensioned = Err.Number = 0
End Function
Кстати, следует заметить, что эта подпрограмма (или библиотека, опубликованная Жаном-Франсуа Корбеттом) вернет false, если массив будет измерен, а затем удален.