Страницы: 1
RSS
VBA. UDF. Функция для проверки значения на строку нулевой длины «=""»
 
Доброго времени суток, Планетяне!
Может кому пригодится
Изменено: Jack Famous - 12.11.2020 12:20:00
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
If vl = vbNullString Then MsgBox "Найдена строка нулевой длины (псевдопустая)!"

:)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Пустая но не очень :-)
Алексей,  
1. Long???  Че не Double ???
2. Чисто лексически IsEmpty - имеет только два ответа , но не три
3. По аналоги с Sheets (  Visible, Hide, VeryHide ) ответы  Не пусто, Пусто  , Очень пусто :-)
4. Что ж вы так MSGBOX то любите?
По вопросам из тем форума, личку не читаю.
 
Дмитрий(The_Prist) Щербаков, привет
А ты пробовал? У меня vl=vbNullString выдаёт True и на реально пустые ячейки

Цитата
БМВ: Long???  Че не Double ???
если ты про Integer, то он либо медленнее, либо такой же по скорости, как Long (сюрприз)
Цитата
БМВ: Чисто лексически IsEmpty - имеет только два ответа , но не три
взял название известной функции и добавил отрицательное возвращаемое значения для контроля ошибок. Мне отлично. Сейчас выложу версию, включающую ещё один отрицательный вывод - для псевдополных (только пробелы, неразрывные пробелы и переносы)
Цитата
БМВ: Что ж вы так MSGBOX то любите?
у меня это диалоги, выводимые опционально. То есть, при проверке строки я могу сразу вывести итог проверки без дополнительного кодинга, т.к. варианты сообщений вшиты в функцию
Изменено: Jack Famous - 12.11.2020 15:01:59
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Коротко: если в вариативную переменную x передать значение ячейки Cell.Value, и при этом x=Empty And Not IsEmpty(x) — это означает, что в ячейке была строка нулевой длины, которую можно получить формулой «=""» или вставленным значением её
Версия 2 + аналог Trim
Изменено: Jack Famous - 12.11.2020 15:29:37
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Доброе время суток
Цитата
Jack Famous написал:
А ты пробовал?
Алексей, или меняйте
Цитата
Функция для проверки значения на строку нулевой длины «=""
на Variant или в
Цитата
Jack Famous написал:
PRDX_IsEmpty(vl)
используйте
Код
PRDX_IsEmpty(vl As String)
 
хватит ко мне "на вы" уже обращаться))
Андрей VG, если пустую ячейку передать в строковую переменную, то штатная IsEmpty() выдаст False как будто это строка нулевой длины. Мне это не нужно. Мне нужно различать пустые ячейки и ячейки, в которых стоит «=""» формулой или значением. Так что название верное и функция работает  :)
Изменено: Jack Famous - 12.11.2020 15:23:14
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
У меня vl=vbNullString выдаёт True и на реально пустые ячейки
да. Я думал догадаешься, что проверять надо ПОСЛЕ проверки на IsEmpty...
Код
Function PRDX_IsEmpty(vl)
    If IsEmpty(vl) Then
        PRDX_IsEmpty = "Найдено ПУСТОЕ значение!"
    Else
        If vl = vbNullString Then
            PRDX_IsEmpty = "Найдена строка нулевой длины (псевдопустая)!"
        Else
            PRDX_IsEmpty = "Значение «" & vl & "» НЕ ПУСТОЕ!"
        End If
    End If
End Function

Мне лично так нагляднее, чем ElseIf непонятно с чем. Но это дело вкуса.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, те же яйца, только в профиль :D
Суть метода/функции

  1.  у меня просто Empty вместо vbNullString
  2. я сначала проверяю на Empty, потому что проверка на равенство с константой должно быть шустрее даже такой лайтовой функции, как IsEmpty()
Изменено: Jack Famous - 12.11.2020 15:38:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
штатная IsEmpty()
Цитата
Обязательный expression аргумент expression — это переменная Variant
Цитата
IsEmpty возвращает значение True, если переменная не инициализована, или для нее явно указано значение Empty
А чего вы собственно от неё ещё хотели? Если работаете с данными ячейки, то сначала определяется тип того, что там и если это строка - тогда уже проверка строкового значения. Медведь же уже написал, но ваши ответы на его подколки - всё мимо :)
Цитата
Jack Famous написал:
хватит ко мне "на вы" уже обращаться))
Алексей, так принято на форуме - зачем нарушать?
 
Цитата
Jack Famous написал:
если ты про Integer,
я байты памяти кто будет экономить?????
По вопросам из тем форума, личку не читаю.
 
Цитата
Андрей VG: так принято на форуме - зачем нарушать?
неправда)) тут с незнакомыми так принято и мы с Мишей обижаемся, когда ты отчуждаешься  :D

По остальному я так и не понял, в чём проблема-то:
  1. я определяю пустая ли ячейка на самом деле или в ней есть строка нулевой длины. Иногда это имеет значение и не одно и то же
  2. да - я определяю строку, но передать должен вариативную переменную. Всё правильно
  3. Обвес для определения псевдозаполненных - это просто для универсальности. Удалить легко

Функция не работает или работает как-то неправильно?
Или что-то другое?)
Изменено: Jack Famous - 12.11.2020 17:04:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх