В поисках последней строки - PullRequest
0 голосов
/ 14 мая 2019

Я пишу макрос для обновления ключевых ячеек из формы, а затем записываю данные в таблицу на втором листе. Для этого я использую For i = 1 для LR для сопоставления, а затем записываю номер строки в переменную, если она находит совпадение.

Однако код для поиска последней строки и, следовательно, длина цикла не работают должным образом.

Dim LR as Long

LR = Cells(Workbooks("Tracking Sheet.xlsx").Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row 

Debug.Print LR

Я пытался предварительно заполнить и меньше 25, и больше 25 (например, 38), но переменная LR всегда показывает 25 в окне Immediate. В ближайшем окне

?Cells(Workbooks("Tracking Sheet.xlsx").Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row 

возвращает 38, как и должно быть.

LR = Cells(Workbooks("Tracking Sheet.xlsx").Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row 

? LR

также возвращает 38

Я просто не понимаю ...

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Попробуйте это:

Dim LR As Long

With Application.Workbooks("Tracking Sheet.xlsx").Worksheets("Sheet1")

LR = .Range("A" & .Rows.Count).End(xlUp).Row
End With
0 голосов
/ 14 мая 2019

Может быть, объясненный код поможет?

LRow = ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, "A").End(xlUp).Row

Давайте разберем этот код. Во-первых, мы помещаем его в оператор With, чтобы сэкономить время при наборе

With ThisWorkbook.Sheets(1)
    LRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With

Давайте разберем это на части. Во-первых, есть .Cells(.Rows.Count, "A")
Это ссылка на одну ячейку. В частности, самая последняя строка в столбце A имеет значение ThisWorkbook.Sheets(1). Rows.Count дает номер последней строки в листах Excel. Последние версии Excel поддерживают 1 048 576 строк, но, например, Excel 97 поддерживает только 65536 строк.
Короче говоря, .Cells(.Rows.Count, "A") для последних версий Excel равно (A1048576)

Тогда End(xlUp). Это происходит так же, как когда вы держите клавишу CTRL и нажимаете кнопку со стрелкой вверх на клавиатуре. Это приводит Excel к первой заполненной строке снизу.

Наконец, .Row, который возвращает номер строки этой найденной ячейки.


Вы также можете начать смотреть сверху. Попробуйте удерживать клавишу CTRL, а затем нажмите кнопку со стрелкой вниз. Это остановится на последней непустой ячейке. Тем не менее, он также остановится, если у вас есть пустые ячейки между заполненными ячейками. Так что не всегда предпочтительный метод. Код будет

With ThisWorkbook.Sheets(1)
    LRow = .Cells(1, "A").End(xlDown).Row
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...