VBA Lopping через союз с несмежными диапазонами - PullRequest
1 голос
/ 15 марта 2019

Я создаю отчет, в котором я просматриваю столбец даты, и на основе значения в этом столбце (попадающего в диапазон) я увеличиваю агрегат со значением в предыдущей ячейке.Поскольку даты указаны в несмежных столбцах, я использую диапазон Union.Я жестко закодировал значения ячеек ниже и удалил остальную часть кода, чтобы отточить его в цикле.Мой цикл проходит 5 раз, но каждый раз появляются значения $ I $ 2 и одно и то же значение даты.Как я могу заставить свой цикл перейти в ячейку K2 и дальше?

Dim c as Range

Range("I2").Select
Set installmentRng = Union(Cells(2, 9), Cells(2, 11), Cells(2, 13), Cells(2, 15), Cells(2, 17))

For Each c In installmentRng
    MsgBox (ActiveCell.Value)
    MsgBox (ActiveCell.Address)
Next c

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

ActiveCell - это ячейка, на которой находится фокус (другими словами, если пользователь начнет что-то печатать, он попадет в эту ячейку).
При работе с данными рабочего листа в VBA вам обычно не нужно иметь дело с ActiveCell. В вашем случае цикл не меняет ActiveCell (и в этом нет необходимости). Вместо этого переменная Range изменится c, и вы можете работать с этим:

For Each c In installmentRng
    MsgBox c.Value
    MsgBox c.Address
Next c

Два дополнительных замечания:
(1) нет необходимости в выражении Range("I2").Select -. Это меняет ActiveCell - но, как уже было сказано, в этом нет необходимости (вам нужно Select утверждение почти никогда, но его часто можно увидеть в (плохом) VBA-коде, потому что макро-рекордер его использует.
(2) Не ставьте скобки вокруг параметра msgBox.

0 голосов
/ 15 марта 2019

Если вы замените ActiveCell.Value на c.Value, я думаю, что ваша проблема решена.

Вы не должны использовать Select, если это возможно. Кроме того, если вы замените Msgbox на Debug.Print, устранение неполадок будет намного менее болезненным. Нажмите Ctrl + G, чтобы увидеть результат.

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