VBA не IsNull - PullRequest
       30

VBA не IsNull

5 голосов
/ 31 марта 2009

Работая с некоторым кодом VBA в Access, при достижении очень специфического набора условий появится окно InputBox, запрашивающее целое число. Пока все хорошо.

Private Sub Command10_Click()

    If Not IsNull(mrf) Then
        If min <> max Then
            If qty <= min Then
                mrf = GetParamValue
            End If
        End If
    End If
    End Sub

Проблема в том, что Not IsNull, похоже, игнорируется. Я хотел бы попросить ввести значение, если оно уже не присутствует. Это продолжает запускать InputBox, пока выполняются условия min <> max и qty <= min. Что мне здесь не хватает? </p>

Ответы [ 4 ]

11 голосов
/ 31 марта 2009

Если mrf - вариант, то изначально он Empty, а не Null. Поэтому вы должны использовать функцию IsEmpty().

4 голосов
/ 31 марта 2009

Нет, Not IsNull работает отлично.

Помните, IsNull - это функция, которая возвращает TRUE, если переданный ей параметр имеет значение null, и false в противном случае.

Ваш оператор "If Not IsNull (mrf) Then" переводится на английский как "Если mrf не равен null, то"

что это означает, когда mrf имеет значение, тогда вы обрабатываете код внутри оператора if. Если вы хотите, чтобы внутренний код запускался, когда mrf равен нулю, то вам нужно удалить NOT из оператора.

1 голос
/ 01 апреля 2009

Вас может заинтересовать этот фрагмент на VB6 / VBA null / nothing / empty:

http://blogs.msdn.com/ericlippert/archive/2003/09/30/53120.aspx

1 голос
/ 31 марта 2009

Я предполагаю, что mrf не равен нулю, даже если он пустой или что-то еще. Это также может быть Nothing, которое отличается от null на земле VBA (я думаю). Попробуйте запустить код в отладчике и посмотреть на значение mrf. В зависимости от того, что такое mrf, вы можете выполнить другой тест (например, проверить len (mrf) или не isNothing (mrf), или если это целое число, а его init равен нулю, тогда mrf <> 0 ... вы понимаете, Надеюсь, это поможет!

...