Здравствуйте! Нужна помощь!
Макрорекордером "нарисовал" код для создания сводной таблицы, в нем диапазон A1:AT100 фиксированный, но в таблице он постоянно увеличивается: A1:AT101, A1:AT102... и т.д.
Как изменить код, дабы в нем использовался реальный диапазон?
Заранее спасибо!
Спойлер
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"'Лист1'!A1:AT100)").CreatePivotTable TableDestination:= _
"'[Таблица.xls]Сводная таблица'!R4C1", TableName:="СводнаяТаблица4", _
DefaultVersion:=xlPivotTableVersion10
ActiveWorkbook.ShowPivotTableFieldList = True
Илья, Ваша проблема в данном случае - это определение последней строки, в которой есть данные.
Эта распространённая задача - почти в каждом макросе нужно определять последнюю строку. Но на удивление, в VBA-Excel нет готового инструмента для решения этой задачи. Поэтому существует несколько способов определения последней строки (я думаю, что способов 5 есть).
Я использую в основном способ с использованием команды "Find". Этот способ позволяет определять последнюю строку без учёта форматирования (например, без учёта заливки ячеек), т.е. позволяет находить последнюю строку с данными.
Я не стал подгонять код под Вашу задачу, попробуйте сами переделать. Я только показываю принцип.
Код
Sub Procedure_1()
'Поиск в скрытых строках не ведётся.
'Например, скрытые строки могут быть в результате применения
'автофильтра. Если это неправильно, то нужно внести изменения в макрос.
Dim lngEndRow As Long
'Определение последней строки.
'У команды "Find" нужно указывать все параметры, т.к. команда "Find"
'связана с программой "Excel", с окном "Найти и заменить".
'Поэтому если не указывать все параметры, то установки окна "Найти и заменить"
'могут повлиять на поиск.
'Знак "?" в данном случае это специальный символ,
'который означает "один любой символ".
'SearchOrder:=xlByRows - поиск по строкам. Это означает,
'что в каком столбце будет раньше найдено, по тому столбцу и
'будет определена последняя строка.
'SearchDirection:=xlPrevious - поиск снизу вверх.
lngEndRow = Range("'Лист1'!A:B").Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False, _
SearchFormat:=False).Row
'Просто любой код для проверки.
'Результат выводится в View - Immediate Window.
Debug.Print Range("'Лист1'!A1:B" & lngEndRow).Address
End Sub