Как выбрать значение столбца для строки в инструкции for?

Спасибо, что терпели мои нубские вопросы в прошлом, у меня есть еще один вопрос, на который я провел обширное исследование и не нашел ответов.

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

Dim id As Range
Dim trtype As Range

set id = Activesheet.Range("Table1[Column1]")

For Each r In id
    r.Select
    Set trtype = .Range(Cells(.ActiveRow, "Column5"))
    MsgBox trtype.Value
Next r

Это возвращает «Несоответствие типов» с выделенной строкой trtype = .Range(Cells(.ActiveRow, "Column5").

Любые идеи о том, как заставить это работать?


person SpeedCrazy    schedule 01.05.2012    source источник
comment
.Range(Cells(.ActiveRow, "Column5")) может работать только внутри блока With. Есть ли один? Также вам нужно использовать set при назначении объектов: Set trtype = .Range....   -  person assylias    schedule 01.05.2012


Ответы (2)


Вы пропустили слово SET в строке:

trtype = .Range(Cells(.ActiveRow, "Column5")) 

trtype — это объектная переменная (т. е. та, которая указывает на встроенный объект Excel). Правило VBA заключается в том, что вы должны использовать SET для его назначения.

В течение многих лет это была моя самая распространенная ошибка VBA!

person Andy Brown    schedule 01.05.2012
comment
Это устранило ошибку несоответствия, но теперь он говорит «Неверная или неполная ссылка» и выбирает .ActiveRow, нужно ли мне активировать мой выбор? - person SpeedCrazy; 01.05.2012
comment
У всех ячеек есть свойство VALUE, и это то, что я обычно использую. Если вы хотите получить сам диапазон, вам нужно: SET trtype = ActiveCell MsgBox trtype ActiveCell.Value Однако вам не нужно выбирать ячейку для работы с ней (и действительно это значительно замедлит ваш макрос) . Вместо этого вы можете просто использовать: MsgBox r.Value - person Andy Brown; 03.05.2012

Я заставил его работать, выполнив следующие действия:

For Each r In id
    r.Select
    trtype = Selection.Text
    MsgBox trtype
Next r

Спасибо, что направили меня на правильный путь с ответом о наборе, который привел меня к обсуждению того, когда использовать набор, и к открытию, что он предназначен только для объектов и что строки должны быть установлены с помощью .Text Не .Value

person SpeedCrazy    schedule 01.05.2012