VBA Проверить, если переменная пуста

У меня есть объект, и в нем я хочу проверить, установлено ли для некоторых свойств значение false, например:

If (not objresult.EOF) Then
  'Some code 
End if

Но иногда objresult.EOF является Emptyи как я могу это проверить?

  • IsEmpty функция только для ячеек Excel
  • objresult.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
Другие вопросы по тегам