Страницы: 1
RSS
Как поймать Nothing?
 
Я застрял.

Код
Private Sub check_status_correctness(a_row)
    Dim status_col_rng As Range
    Dim status_val As String
    Dim found_status As Range

    Set status_col_rng = Sheets("Settings").Columns(2)
    status_val = Sheets(MAIN_SHEET).Cells(a_row, STATUS_COL)
    Set found_status = status_col_rng.Find(status_val, LookIn:=xlValues, LookAt:=xlWhole)

    If found_status Is Nothing Then
        Call announce_error(a_row, STATUS_COL)
    End If
End Sub

Картинка из дебаггера: https://b.radikal.ru/b12/1808/0d/20f122b04984.png
В дебаггере, вроде бы, объект Nothing. Но вот условие не срабатывает. Т.е. found_status Is Nothing имеет значение False.

Помогите, пожалуйста, разобраться, как проверить, значение - это Nothing или нет.
Изменено: Михаил - 20.08.2018 13:00:53
 
Цитата
Михаил написал:
If found_status Is Nothing Then        Call announce_error(a_row, STATUS_COL)    End If
Код
If found_status Is not Nothing Then
        Call announce_error(a_row, STATUS_COL)
End If
 
Название темы классное - Как поймать ничего?
Все срабатывает. Проверяете вы корректно. found_status Is Nothing ,  при found_status=Nothing  является True.
Изменено: БМВ - 20.08.2018 12:12:35
По вопросам из тем форума, личку не читаю.
 
ivanok_v2, это нарушит логику алгоритма. Мне надо отловить перехватить, когда метод Find не нашел искомое.

Проблема, похоже, вот в чем. Возвращается-то не Nothing. Возвращается объект Range. И в нем - внутри - в комментарии написано Nothing. Т.е. метод Find искал, не нашел, вернул такой объект. Что за зверь такой?
По документации должен был вернуть Nothing.
https://docs.microsoft.com/en-us/office/vba/api/Excel.Range.Find

Подскажите, пожалуйста, как мне поймать пустышку?
 
Цитата
Михаил написал:
В дебаггере, вроде бы, объект Nothing.
Судя по картинке, объект совсем даже не Nothing, иначе б свойства не увидели
 
Разобрался, вроде. Я задал искать во всей колонке. А надо было ограничить.
 
как вариант решения
Код
    Set found_status = Cells.Find(status_val, LookIn:=xlValues, LookAt:=xlWhole)
    On Error Resume Next
        Err.Clear
        t = found_status.Value
        If Err Then
            VBA.MsgBox "отловил))", vbInformation
        End If
    On Error GoTo 0
Изменено: ivanok_v2 - 20.08.2018 12:33:52
Страницы: 1
Наверх