VBA: Ошибка «1004» при попытке определить объект Range (используется WorkSheets / ActiveSheet) - PullRequest
0 голосов
/ 03 февраля 2020
Sub GoToCont()

    Ind = ActiveCell.Value                        'value I am searching for
    RPointer = ActiveCell.Row                     'Pointer for active cell row
    Dim Mark As Range                             'Tried defining Mark because I kept getting errors when trying reference the cell directly in the Find Method
    Set Mark = ActiveSheet.Range(RPointer, 1)     'Debug shows Mark=None and this is where I get '1004'

    Columns(1).Find(What:=Ind, After:=Mark, LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=2).Activate

End Sub

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

Спасибо за помощь;)

PS - Я заверну Команды ActiveCell, я просто делал это как можно проще, пока не получу работу.

Ответы [ 3 ]

4 голосов
/ 03 февраля 2020

Ваша проблема в том, как написана строка Set Mark = ActiveSheet.Range(RPointer, 1).

Это должно быть либо Set Mark = ActiveSheet.Cells(RPointer, 1), либо Set Mark = ActiveSheet.Range("A" & RPointer)

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

Способ формирования объекта Range равен Range (cell1, cell2).

Вы пытаетесь объявить это с помощью Range (Row, Column).

Чтобы заставить его работать, вы должны изменить его на Range("A" & RPointer), чтобы получить первую строку в столбце A.

См. Также

0 голосов
/ 03 февраля 2020

Я не согласен с двумя ответами выше, насколько ваше намерение верно. Вы пытаетесь определить ячейку и использовать правильный синтаксис для этого. Но, похоже, вы запутались между 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...