Ваше выражение анализируется как (var is "") or "1"
, что всегда Истина, потому что "1"
Истина-иш.
Если вы добавите круглые скобки, чтобы получить var is ("" or "1")
, это эквивалентно var is True
, потому что "" or "1"
Истина, потому что «1» Истина-иш.
Сравнение строк с is
чревато опасностью, потому что оператор is
проверяет тождество , а не равенство.
Вы, вероятно, хотите var in ("", "1")
Если mrf
Различно, затем это первоначально Empty
, нет Null
. Поэтому необходимо использовать IsEmpty()
функция.
Нет, Не IsNull работает отлично.
Помните, IsNull является функцией, которая возвращает TRUE, если параметр передал ему, является пустым, и ложным иначе.
Ваш оператор "If Not IsNull (mrf) Then" переводит на английский язык как, "Если mrf не является пустым затем"
то, что это означает, - когда mrf имеет значение, затем Вы обрабатываете код в если оператор. При необходимости чтобы внутренний код стрелял, когда mrf ЯВЛЯЕТСЯ пустым, то необходимо удалить НЕ из оператора.
Мое предположение - то, что mrf не является пустым, даже если это пусто или что-то еще. Это могло также быть Ничто, которое отличается от пустого указателя на земле VBA (я думаю). Попытайтесь выполнить код в отладчике и посмотреть на значение mrf. В зависимости от того, каков mrf, можно сделать другой тест (как проверка len (mrf) или не isNothing (mrf) или если это - целое число, и это - init для обнуления, затем mrf <> 0.... Вы получаете идею. Надежда, которая помогает!
Вы могли бы интересоваться этой частью на VB6/VBA null/nothing/empty:
http://blogs.msdn.com/ericlippert/archive/2003/09/30/53120.aspx