Я переформатировал диапазон Sheets("Records")
в книге как Table (named "RecordsTable")
, чтобы было легче сделать INDEX(MATCH,MATCH)
функции для генерации отчетов .... но теперь я прикрутил свою процедуру циклирования для заполнения этого диапазона от ввода на Sheets("FORM")
.Excel VBA: Как найти первую пустую строку в таблице для цикла Loop?
Раньше считалось:
Set r = Sheets("Records").Range(A & Rows.Count).End(x1Up).Offset(1, 0)
i = 0
For Each c In Range("dataRange")
'dataRange is a list of cells to reference from the FORM input sheet
r.Offset(0, i).Value = Worksheets("FORM").Range(c)
i = i + 1
Next
Однако этот код теперь выбрать первую строку в КОНЦЕ "RecordsTable"
(строка 501, так как я определил 500 строк в моей таблице) и вставки данных там.
Я попытался изменить его к этому:
Set r = Sheets("Records").ListObjects("RecordsTable").DataBodyRange("A" & Rows.Count).End(x1Up).Offset(1, 0)
i = 0
For Each c In Range("dataRange")
r.Offset(0, i).Value = Worksheets("FORM").Range(c)
i = i + 1
Next
Но этот код все еще выбрать строку 501 и сделать эту строку часть "RecordsTable"
. Как я могу правильно Set "r" to =
первая пустая строка в "RecordsTable"
?
Для справки: Column "A" in "RecordsTable"
имеет заголовок [INV #]
. Кроме того, когда я вхожу в строку "Set r = ..."
, Rows.Count
возвращает значение 1 миллион + (т. Е. Полные строки на листе). Если я правильно понимаю это, я хочу, чтобы оно возвращало значение 500 (т. Е. Полные строки в таблице) - это верно?
EDIT
"dataRange"
является единым списком столбца ссылок на ячейки (я бы их маркировку в колонке B, а @chrisneilsen предложить:
J6
Y6
J8
J10
Y8
и т.д.
Они являются клетки на Sheets("FORM")
, что мне нужно, чтобы извлекать данные из и заполнить в моей таблице, в порядке, указанном в "dataRange"
.
Настоящее быстрое предложение: посмотрите, как вы поместили рабочий лист, прежде чем использовать «ListObjects»? Делайте это каждый раз, когда вы используете 'Range()', 'Cells()', 'Rows.Count' и т. Д. Это скажет VBA, какой лист получить эту информацию. В противном случае используется 'ActiveSheet', и это может привести к неожиданным результатам. – BruceWayne
@BruceWayne ^^ спасибо –