2016-02-01 3 views
0
Sub FindTest() 
    Dim result As Integer 
    Dim target As Integer 

    target = Worksheets("Sheet1").Cells(8, "A") 

    result = Worksheets("Sheet1").Range("A10:A21").Find(What:=target,_ 
    LookIn:=xlValues, SearchOrder:=byRows).Row 

    ThisWorkbook.Worksheets("Sheet1").Cells("D7") = result 
End Sub 

Другой проект с использованием .Find() выдает ошибку. Изолирование кода, необходимого для создания работы .Find(), привело меня к приведенному выше примеру.VBA .Find() выбрасывает «Невозможно получить свойство« Найти свойство класса диапазона »

Выполнение приведенного выше кода приводит к появлению сообщения об ошибке ниже, на линии, начинающейся с строки result = ..., где находится .Find().

Ошибка выполнения «1004»: Невозможно получить Найти объект класса Range

Я заменил .Range() с .Cells() без изменения ошибки сообщение.
Копирование/вставка кода с использованием .Find() для определения последней используемой строки на листе, доступной в других вопросах в StackExchange, не вызывает ошибок. Пример ниже:

Dim lastUsedRow as Integer 
lastUsedRow = Worksheets("Receiving Worksheet").Cells.Find(What:="*",_ 
SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row 
+0

Я считаю, что переменная «цели» должен быть фактическим значением ячейки - а не сама ячейка. т.е.: target = Worksheets («Sheet1»). Ячейки (8, «A»). Значение –

+2

@ Grade'Eh'Bacon '.Value' является свойством по умолчанию' Cells() '. –

+0

Какова ценность 'target', когда он ломается? –

ответ

2
  1. SearchOrder:=byRows =>SearchOrder:=xlByRows
  2. Место пространства перед _ в конце первой линии
+0

Пробелы и символы подчеркивания не указаны в моем фактическом коде, они добавляются сюда только на этом форуме, чтобы исключить необходимость использования полосы прокрутки. xlbyRows исправлено и в строке 10. Цвета («D7») были изменены на .Cells (7, «D»). Ошибка не возникает, но результат неверен. Я изменил параметр .Range («A10: A21») на .Range («A9: A21»), поскольку он выглядит так, что диапазон поиска игнорирует первую ячейку в диапазоне поиска. Спасибо за помощь всем. –

+0

Да, 'Find()' игнорирует первую ячейку. Дополнительная информация в [Документация Microsoft] (https://msdn.microsoft.com/en-us/library/office/ff839746.aspx), раздел _Parameters_ -> _After_. Вероятно, вы можете обойти это, установив последнюю ячейку своего диапазона как значение для 'After'. –

Смежные вопросы