Я не согласен с двумя ответами выше, насколько ваше намерение верно. Вы пытаетесь определить ячейку и использовать правильный синтаксис для этого. Но, похоже, вы запутались между Cell и Range . Мои коллеги выше правильно указывают, что вы должны использовать синтаксис для определения Range , если вы хотите sh для определения диапазона. Я не согласен с тем, что вы не должны определять ячейку как диапазон. Ячейка - это ячейка, и вы правильно пытаетесь использовать синтаксис ячейки.
Dim Mark as Range
Dim Cell as Range
Set Mark = Range("A1")
Set Cell = Cells(1, "A")
Вариант Set Mark = Range("A" & RPointer")
работает отлично, но это плохо для VBA, поскольку он адаптирует синтаксис рабочей таблицы Excel в VBA. После того, как вы попытаетесь написать расширенный код, в котором и строка, и столбец являются вычисляемыми переменными, этот метод далеко не сложен, чтобы быть практически осуществимым. Это не должно быть рекомендовано вам здесь. Вы должны использовать Set Mark = ActiveSheet.Cells(RPointer, 1)
. Set Mark = ActiveSheet.Cells(RPointer, "A")
может быть проще для чтения, и поэтому я использую его время от времени, если столбец не будет рассчитываться. Поскольку вы уже продвинулись к ссылкам на ячейки с помощью (RPointer, 1)
, придерживайтесь этого метода.
Кстати, используя функцию Find для Activate
, ячейка вызывает проблемы ( What isn ' не найдено *). Это также противоречит правилу никогда не Select
или Activate
ничего при использовании VBA, за исключением очень немногих и очень особых обстоятельств (которые здесь не применяются). Функция Find возвращает объект диапазона. Поэтому ...
Dim Fnd as Range
Set Fnd = Columns(1).Find(What:=Ind, After:=Mark, LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=2)
If not Fnd Is Nothing Then