Ошибка несоответствия типов при использовании метода range.find - PullRequest
0 голосов
/ 20 декабря 2018

Может ли кто-нибудь помочь мне с использованием метода range.find.Ошибка несоответствия типов продолжает появляться, и я не уверен, почему.

Я попытался установить переменную диапазона в Range, затем использовать Set, чтобы определить ее, и я также попытался без использования Set, нозатем возникает другая ошибка.

Dim r1 As Range
    Set r1 = Range("B:K").Find("WhatToFind").row

Я ожидаю, что приведенный выше код даст мне строку WhatToFind, и он определенно находится на листе, но все равно выдает ошибку.

Даже если я удаляю .Row с конца, я получаю эту ошибку:

Ошибка времени выполнения '1004':
Ошибка приложения или объекта

Ответы [ 5 ]

0 голосов
/ 20 декабря 2018

Попробуйте полностью определить ваш диапазон (например, Set r1 = Sheet1.Range("B:K").Find("WhatToFind"))

Если вы оставите его без квалификации, он попытается использовать ActiveSheet.Если, например, вы смотрите на Таблицу вместо Рабочего листа, то это выдаст ошибку 1004 - потому что ActiveSheet, будучи диаграммой, не имеет никаких ячеек, столбцов или диапазонов для поиска.

0 голосов
/ 20 декабря 2018

Надстройка?

Нет рабочего листа .Вы запускаете этот код, например, из Надстройки, или пытаетесь запустить этот код на листе диаграммы.Вы должны выбрать рабочий лист на вкладке.

0 голосов
/ 20 декабря 2018

Свойство Row имеет тип long и представляет номер строки, а не сам объект строки (Range).

Если вы хотите получить объект строки, вы, вероятно, захотите EntireRow.

Dim r1 As Range
Dim r2 as Long
Set r1 = Range("B:K").Find("WhatToFind").EntireRow
r2 = Range("B:K").Find("WhatToFind").Row

И просто для пояснения, хотя вы, возможно, уже знаете это, set используется только для ссылочных типов.Поскольку long является типом значения, вы не используете команду set.

0 голосов
/ 20 декабря 2018

Вам нужно проверить, что что-то найдено, прежде чем вы сможете что-то вернуть с него.

Sub Test()

    Dim r1 As Range
    Dim lFoundRow As Long
    Set r1 = Range("B:K").Find("WhatToFind")
    If Not r1 Is Nothing Then
        MsgBox "WhatToFind is on row " & r1.Row
        lFoundRow = r1.Row
    Else
        MsgBox "Not found"
    End If

End Sub  

Я сомневаюсь, что это является причиной ошибки, но FIND запоминает настройки с момента последнего использования (через код или вручную на листе с Ctrl+F).

Вы можете установить каждый параметр на FIND:

Sub Test()

    Dim r1 As Range
    Dim lRow As Long

    With ThisWorkbook.Worksheets("Sheet1").Range("B:K")
        Set r1 = .Find( _
            What:="WhatToFind", _
            After:=.Cells(1, 1), _
            LookIn:=xlValues, _
            LookAt:=xlWhole, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            MatchByte:=False, _
            SearchFormat:=False)

        If Not r1 Is Nothing Then
            lRow = r1.Row
        Else
            MsgBox "Not found"
        End If
    End With

End Sub
0 голосов
/ 20 декабря 2018

Ваш r1 является типом диапазона, но

Set r1 = Range ("B: K"). Find ("WhatToFind"). Row - не Range.Это число.

Используйте

Set r1 = Range("B:K").Find("WhatToFind")
dim r1row
r1row = r1.row

Или

dim lR as long
lR = Range("B:K").Find("WhatToFind").Row

Но помните, что Range ("B: K"). Find ("WhatToFind") может быть"Ничего"

...