Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Split по vbCrLf - или проверка на пустые данные 
V
    Опции темы
Ciber SLasH
Дата 22.5.2013, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Приветствую всех!
Стоит задача проверить ячейку Excel на пустые данные (пробелы, переводы строк).
Пробовал так:
Код

Public Function IsEmptyStr(str As String) As Boolean
Dim arr() As String
    arr = Split(str, vbCrLf)
    Debug.Print UBound(arr)
    IsEmptyStr = False
End Function

Sub Test_Click()
Dim res As Boolean
    res = IsEmptyStr(Range("A1"))
End Sub

В лог выводится 0.
Что делаю не так?
PM   Вверх
Ciber SLasH
Дата 22.5.2013, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Понял ошибку.
Так работает:
Код

Public Function IsEmptyStr(str As String) As Boolean
Dim arr() As String
Dim st As String
    st = Replace(str, Chr(13), Chr(10))
    st = Replace(str, Chr(10) & Chr(10), Chr(10))
    arr = Split(str, Chr(10))
    Debug.Print UBound(arr)
    IsEmptyStr = False
End Function

PM   Вверх
Akina
Дата 22.5.2013, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Во-первых, не то передаёте. Укажите конкретное свойство.
Во-вторых, есть такая фигня как трассировка кода, она помогает понять, что не так.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ciber SLasH
Дата 22.5.2013, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Новый вариант:
Код

Public Function IsEmptyStr(str As String) As Boolean
IsEmptyStr = True
Dim arr() As String
Dim st As String
Dim i
    st = Replace(str, Chr(13), Chr(10))
    st = Replace(str, Chr(10) & Chr(10), Chr(10))
    arr = Split(str, Chr(10))
    For i = LBound(arr) To UBound(arr)
        If Len(Trim(arr(i))) <> 0 Then
            IsEmptyStr = False
            Exit For
        End If
    Next i
End Function

Sub Test2_Click()
    MsgBox IsEmptyStr(Range("A1").value)
End Sub

PM   Вверх
Dumm
Дата 22.5.2013, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.7.2010

Репутация: нет
Всего: 1



Попробуй в качестве разделителя вместо vbCrLf использовать Chr(10).
Ага, долго писал...

Это сообщение отредактировал(а) Dumm - 22.5.2013, 18:34
PM MAIL   Вверх
Akina
Дата 22.5.2013, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Ciber SLasH @  22.5.2013,  19:28 Найти цитируемый пост)
Новый вариант:

Чем тримать каждую строку в цикле, просто добавьте замену пробелов на пустую строку перед шинковкой.
Ещё проще, чем сплитовать, просто посчитать 
Код

len(str)-len(replace(str,chr(10),''))



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ciber SLasH
Дата 11.6.2013, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Новый вариант:
Код

Public Function IsEmptyStr(str As String) As Boolean
IsEmptyStr = True
Dim st As String
    st = Replace(str, Chr(13), Chr(10))
    st = Replace(str, Chr(10), "")
    If Len(Trim(st)) <> 0 Then
        IsEmptyStr = False
    End If
End Function

PM   Вверх
SAS888
Дата 16.6.2013, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.1.2008

Репутация: 1
Всего: 1



Если я правильно понял задачу, то можно проще:
Код

Public Function IsEmptyStr(str As String) As Boolean
    IsEmptyStr = IIf(Len(Application.Clean(str)) = 0, True, False)
End Function

PM MAIL   Вверх
Ciber SLasH
Дата 22.6.2013, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



SAS888, не объсните, что означет функция Application.Clean?
Что-то не могу нагуглить её...
PM   Вверх
SAS888
Дата 25.6.2013, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.1.2008

Репутация: 1
Всего: 1



Функция Application.Clean(arg)  очистит переменную arg от всех непечатных символов. Таких, как Chr(10), Chr(13) и т. п.
PM MAIL   Вверх
Akina
Дата 25.6.2013, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Ciber SLasH @  22.6.2013,  12:47 Найти цитируемый пост)
что означет функция Application.Clean?
Что-то не могу нагуглить её... 

А запустить Эксель, Открыть редактор VBA, вызвать Object Explorer, ввести в поле поиска Clean и нажать поиск - это, конечно, не наш метод...
Цитата

Function Clean(Arg1 As String) As String
Member of Excel.WorksheetFunction

Цитата

Using the WorksheetFunction Object

Use the WorksheetFunction property to return the WorksheetFunction object. 

Цитата


Example
This example displays the result of applying the Min worksheet function to the range A1:A10.

Код

Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer


Добавлено через 2 минуты и 57 секунд
Я уже не говорю о том, что можно ввести Clean в строку поиска редактора VBA. И выяснится, что это не более чем стандартная функция ПЕЧСИМВ()


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ciber SLasH
Дата 25.6.2013, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Всем спасибо, про Clean понял.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0861 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.