Является ли ваш вариант массива пустым или пустым ()?
«Пустой» - неинициализированный вариант: IsEmpty (myVar) вернет истину ... И вас могут обмануть, думая, что у вас есть пустой массив (это «Пусто ()», а не «Пусто» - попробуйте не отставать, после этого класса будет короткий тест), потому что IsEmpty (myArray) тоже возвращает True.
Dim myVar as Variant ' this is currently Empty, and Ubound returns an error
Dim myArray() as variant ' this is currently Empty(), and Ubound returns an error
Redim myVar(0 to 0) ' this is no longer empty, and has a valid Ubound
Redim myArray(0 to 0) ' this is no longer empty, and has a valid Ubound
Надежный способ проверить myVar - это TypeName (myVar) - если это массив, имя содержит квадратные скобки:
If Instr(Typename(myVar), "(") > 0 then
' we now know it is an array
If Not IsEmpty(myVar) Then
' We can now check its dimensions
If Ubound(myVar) > 0
' insert error-free code here
Endif
Endif
Endif
Полный ответ: «Обнаружение варианта массива в Excel VBA» на Excellerando .