Как создать новый инкрементный ссылочный номер в следующей строке в Excel VBA - PullRequest
0 голосов
/ 26 февраля 2020

Я унаследовал регистр Excel со следующим модулем VBA. Предполагается создать новую ссылку на основе той, что в строке выше, а также скопировать форматирование вниз. На самом деле все, что он делает, это копирует именно то, что в строке выше.

Dim lr As Long
lr = Range("A" & Rows.Count).End(xlUp).Row
Range("A" & lr).AutoFill Destination:=Range("A" & lr).Resize(2)

Rows(lr).Offset(0, 0).Copy
Rows(lr).Offset(1, 0).EntireRow.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False

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

Ответы [ 2 ]

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

Давайте попробуем разобрать это:

Rows

возвращает коллекцию Range объектов на активном листе; каждый объект Range представляет одну строку.

Rows.Count

возвращает количество возможных строк на листе. Это число зависит от того, какую версию Excel вы используете; в моем случае это 1048576.

"A" & Rows.Count

возвращает адрес последней ячейки в столбце A или A1048576

Range("A" & Rows.Count)

возвращает объект Range, представляющий последняя ячейка в столбце A.

Вызов метода End:

Range("A" & Rows.Count).End(xlUp)

возвращает новый объект Range, конец которого был перемещен вверх от конца предыдущего диапазона. Другими словами, новый объект Range представляет последнюю использованную ячейку в столбце A.

Наконец, мы хотим получить номер строки последней использованной ячейки, используя свойство Row; и мы будем хранить это число в переменной lr.

lr = Range("A" & Rows.Count).End(xlUp).Row

Давайте посмотрим на следующую строку:

Range("A" & lr)

возвращает объект Range, представляющий ячейка в столбце A и номер строки в lr, или последняя использованная ячейка в столбце A.

Мы хотим вызвать метод AutoFill, чтобы заполнить значения из предыдущего набора ячеек в новый набор ячеек. В этом случае мы хотим автоматически заполнить ячейку в предыдущем ряду ячейкой в ​​следующем ряду. Мы можем сделать это, передав объект Range, представляющий последнюю использованную ячейку вместе с новой ячейкой, в параметр Destination.

Мы можем получить такое Range, используя метод Resize, передавая 2 как число строк в новом Range:

Range("A" & lr).Resize(2)

и вызывая метод AutoFill:

Range("A" & lr).AutoFill Destination:=Range("A" & lr).Resize(2)

Но обратите внимание, что есть Есть разные способы автозаполнения: мы можем автоматически заполнить те же значения, что и в предыдущих ячейках. Чтобы указать, что мы хотим обрабатывать предыдущие значения как серию для создания новых значений, нам нужно передать тип автозаполнения:

Range("A" & lr).AutoFill Destination:=Range("A" & lr).Resize(2), Type:=xlFillSeries

VBA-ссылки

Ссылки на объектную модель Excel

Обратите внимание, что Rows и Range являются членами недокументированного объекта Global , но они работают так же, как и соответствующие свойства объекта Range .

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

Предположение, но я бы указал Type параметр Range.AutoFill:

Range("A" & lr).AutoFill Destination:=Range("A" & lr).Resize(2), Type:=xlFillSeries
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...