VBA: Используйте «Найти», чтобы получить строку значения / исправления ошибки переменной объекта - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужно использовать функцию «найти», чтобы получить строку значения, где это значение определено из другого рабочего листа, но я продолжаю получать неопределенные ошибки объекта-переменной, даже когда я пытаюсь определить все.

Изначально я смог заставить работать код ниже. (Я вставляю «тестовую» версию кода, которая использует только небольшой диапазон из 20 ячеек. Результат помещается в ячейку «А1», чтобы убедиться, что он работает правильно при тестировании.)

X = Range("D6").Value

Range("A1").Value = Range("D2:D20").Find(X).Row

Но Когда я использую эту строку в большом наборе данных, я получаю сообщение об ошибке 91 («Переменная объекта или переменная блока не установлена»).

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

 Sub Test3()

    Sheets("2017").Select
    Dim X As Long
    X = Range("D6").Value

    Dim ws As Worksheet
    Set ws = Worksheets("2017")

    Dim SearchRange As Range
    Dim FindRow As Range
    Set SearchRange = ws.Range("D2", ws.Range("D20").End(xlUp))
    Set FindRow = SearchRange.Find(X, LookIn:=xlValues, lookat:=xlWhole)

    If Not FindRow Is Nothing Then ReturnRowNumber = FindRow.Row

    'Range("A1").Value = FindRow 'Running this row gives application-defined error 1004

    Dim i_2017 As Long
    i_2017 = FindRow.Rows(1)  'All of these rows give object variable not set error 91
    'i_2017 = FindRow
    'i_2017 = FindRow.Rows.Item(1)
    Range("A1").Value = i_2017 'Check that the sub returns 6

End Sub

Если я пытаюсь вернуть «FindRow» в ячейку «A1», я получаю ошибку 1004 («Application- определенная или определенная объектом ошибка ")

Если я пытаюсь сохранить" FindRow "в качестве другой переменной или использовать свойство" Item ", я получаю ошибку 91 (" Переменная объекта или переменная блока не установлена ​​")

1 Ответ

1 голос
/ 17 февраля 2020

Вам необходимо заключить весь ваш код, который предполагает, что FindRow действительно найден внутри вашего оператора If Not FindRow is Nothing.

Sub Test3()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("2017")
Dim Found As Range, ReturnRowNumber As Long

Set Found = ws.Range("D:D").Find (ws.Range("D6"), LookIn:=xlValues, LookAt:=xlxWhole)

If Not Found Is Nothing Then
    'All code that assumes your value is found goes HERE
    ReturnRowNumber = Found.Row
    Range("A1").Value = Found
Else
    'All code that assumed your value is NOT found goes HERE
    MsgBox ws.Range("2017") & ": Not Found in Range"
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...