VBA Проверить, если переменная пуста - PullRequest
42 голосов
/ 25 июля 2010

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

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

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

  • IsEmpty функция только для ячеек Excel
  • objresult.EOF Is Nothing - возврат Empty
  • objresult.EOF <> null - верните также Empty

Ответы [ 4 ]

80 голосов
/ 26 июля 2010

Способ проверки зависит от типа данных свойства:

| Type                                 | Test                            | Test2
| Numeric (Long, Integer, Double etc.) | If obj.Property = 0 Then        | 
| Boolen (True/False)                  | If Not obj.Property Then        | If obj.Property = False Then
| Object                               | If obj.Property Is Nothing Then |
| String                               | If obj.Property = "" Then       | If LenB(obj.Property) = 0 Then
| Variant                              | If obj.Property = Empty Then    |

Вы можете указать DataType, нажав F2, чтобы запустить Обозреватель объектов и найти Объект. Другим способом было бы просто использовать функцию TypeName: MsgBox TypeName(obj.Property)

18 голосов
/ 11 декабря 2013

Чтобы проверить, является ли Variant Нулевым, вам нужно сделать это следующим образом:

Isnull(myvar) = True

или

Not Isnull(myvar)
11 голосов
/ 20 мая 2015

Для числа это сложно, потому что если числовая ячейка равна empty VBA назначит ему значение по умолчанию 0, поэтому вашему коду VBA сложно определить разницу между введенным нулем и пустым числовым клетка.

Следующая проверка сработала для меня, чтобы увидеть, был ли введен фактический 0 в ячейку:

If CStr(rng.value) = "0" then
    'your code here'
End If
0 голосов
/ 07 апреля 2019

У меня была похожая проблема с целым числом, которое могло быть законно присвоено 0 в Access VBA.Ни одно из перечисленных выше решений не сработало для меня.

Сначала я просто использовал логические выражения var и 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
...