Почему метод Range.Find () так запутан? - PullRequest
2 голосов
/ 07 января 2020

Этот код выдает мне ошибку 424. «Требуется объект».

Dim playerLocation As Range
Set playerLocation = Sheets("World Map").UsedRange.Find("&").Address

И это прекрасно работает

Set playerLocation = Sheets("World Map").UsedRange.Find("&")

Но когда я помещаю их в окно:

?Sheets("World Map").UsedRange.Find("&").Address
$T$18
?Sheets("World Map").UsedRange.Find("&")
&

Это только я или это совершенно бэкворды? Разве переменная Range не принимает объект диапазона? Но это создает ошибку, когда я явно даю ему адрес ячейки. Я так растерялся.

1 Ответ

5 голосов
/ 07 января 2020

От Microsoft , метод Range.Find:

Возвращаемое значение:
Объект Range, представляющий первую ячейку, в которой находится эта информация найдено.

Однако свойство Range.Address :

Возвращает строковое значение, представляющее ссылку на диапазон на языке макроса.

Возможно, один из способов думать об этом заключается в том, что, явно используя .Address, вы запрашиваете строку. Вы не просите Объект (который Range). Если бы вы были, вы бы правильно объявили свой объект и просто пропустили .Address.

И, конечно, вы всегда можете получить свойство Address из переменной Range ... Dim findRng as Range // Set findRng = Worksheets(1).Cells.Find("something") // debug.print findRng.Address.

Теперь вы также можете получить доступ к всем другим Range свойствам , поэтому, когда мне лично нужно использовать Find, я склонен установить его как Range, поэтому я не буду позже, если я захочу, придется «работать задом наперед», например, выделите жирным шрифтом ячейку и т. д. c.

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