найти, если метод `find` возвращает `ничего` в excel vba

Я пытаюсь найти идентификатор в списке и получить его адрес, а также справиться с ситуацией, если ничего не найдено.

Вот что у меня есть:

Function find_in_two_ranges_two_sheets(ws1 As String, col1 As Integer) As Range

    Dim rows1 As Integer
    rows1 = Get_Rows_Generic(ws1, 1)
    Dim range1 As Range ' range of first search
    With Worksheets(ws1)
        Set range1 = .Range(.Cells(1, col1), .Cells(rows1, col1))
    End With

    Dim found1 As Range
    Set found1 = range1.Find("test id", LookIn:=xlValues)  

    If found1 = Nothing Then
        MsgBox "nothing"
    Else
        MsgBox found1.AddressLocal
    End If


    Set find_in_two_ranges_two_sheets = range1
End Function


Sub test_stuff()
    Dim x As Range
    Set x = find_in_two_ranges_two_sheets("usersFullOutput.csv", 1)
    MsgBox x.Address
End Sub

Когда я запускаю test_stuff(), я получаю ошибку в функции в строке If found1 = Nothing Then с выделенным словом Nothing. «Ошибка компиляции; Недопустимое использование объекта». Не знаю, что делать.


person DBWeinstein    schedule 15.03.2015    source источник
comment
попробуй If found1 is Nothing Then   -  person tospig    schedule 16.03.2015


Ответы (1)


Для проверки объекта range нужно использовать is вместо =:

If found1 Is Nothing Then
    MsgBox "nothing"
Else
    MsgBox found1.AddressLocal
End If

Пояснение:

По материалам Аллена Брауна

Nothing — это неинициализированное состояние объектной переменной. Объект не может быть простой переменной, такой как число или строка, поэтому он никогда не может быть равен 0 или "". Это должна быть более полная структура (текстовое поле, форма, набор записей, querydef,...)

Поскольку это не простое значение, вы не можете проверить, равно ли оно чему-либо. В VBA есть ключевое слово Is, которое вы используете.

person tospig    schedule 15.03.2015