VBA Проверить, если переменная пуста
У меня есть объект, и в нем я хочу проверить, установлено ли для некоторых свойств значение false, например:
If (not objresult.EOF) Then
'Some code
End if
Но иногда objresult.EOF
является Empty
и как я могу это проверить?
IsEmpty
функция только для ячеек Excelobjresult.EOF Is Nothing
- вернутьEmpty
objresult.EOF <> null
- вернутьEmpty
также!
3 ответа
Как вы проводите тестирование, зависит от типа данных свойства:
| Тип | Тест | Test2 | Числовой (Long, Integer, Double и т. Д.) | Если obj.Property = 0, то | | Boolen (True/False) | Если не obj.Property Тогда | Если obj.Property = False, то | Объект | Если obj.Property ничего, то | | Строка | Если obj.Property = "" Тогда | Если LenB(obj.Property) = 0, то | Вариант | Если obj.Property = пусто, то |
Вы можете указать DataType, нажав F2 для запуска Обозревателя объектов и поиска объекта. Другим способом было бы просто использовать функцию TypeName:MsgBox TypeName(obj.Property)
Чтобы проверить, если Variant
Это Null, вам нужно сделать это так:
Isnull(myvar) = True
или же
Not Isnull(myvar)
Для числа это сложно, потому что если числовая ячейка empty
VBA назначит ему значение по умолчанию 0, поэтому вашему коду VBA сложно определить разницу между введенным нулем и пустой числовой ячейкой.
Следующая проверка работала для меня, чтобы видеть, был ли фактический 0, введенный в ячейку:
If CStr(rng.value) = "0" then
'your code here'
End If
У меня была аналогичная проблема с целым числом, которому можно было бы законно присвоить 0 в Access VBA. Ни одно из вышеперечисленных решений не помогло мне.
Сначала я просто использовал логическую переменную и оператор IF:
Dim i as integer, bol as boolean
If bol = false then
i = ValueIWantToAssign
bol = True
End If
В моем случае назначение моей целочисленной переменной происходило внутри цикла for и другого оператора IF, поэтому в итоге я использовал "Exit For" вместо этого, поскольку он был более кратким.
Вот так:
Dim i as integer
ForLoopStart
If ConditionIsMet Then
i = ValueIWantToAssign
Exit For
End If
ForLoopEnd