Serge, я наваял, но я навроде того мужика из анекдота:
Сам пишу, сам не понимаю.
Вкратце суть:
в модуле 1 сляпан краткий макрос qqq(), задачей которого является определить границы сводной (правый крайний столбец, нижнюю строку) и задать соответствующую им область печати. Комментарии там, думаю вопросов не будет.
А вот дальше - я в модуль листа 4 записал макрос по событию изменения листа, который при затрагивании ячеек с фильтрами сводной на листе должен запускать qqq.
Мои комментарии по поводу работы второго макроса изложены в его тексте (ненене, мата нет, одно недоумение)
Короче - работает, шайтан!
Тексты макросов:
Sub qqq()
Dim lngI As Long
Dim lngJ As Long
lngI = [a4].End(xlToRight).Column 'определяем номер крайнего правого столбца заполненной области
lngJ = Cells(Rows.Count, 1).End(xlUp).Row 'определяем номер строки заполненной области
With ActiveSheet 'задаем область печати в зависимости от найденных номеров строки и столбца
.PageSetup.PrintArea = "$A$1:" & Cells(lngJ, lngI).Address
End With
End Sub
Макрос в модуле листа4:
Private Sub Worksheet_Change(ByVal Target As Range)
'вот честно - я хрен его знает, почему условия получаются истинными при изменении фильтров таблицы
'по идее - наоборот должно быть - т.е. когда target попадает в диапазон А3:В4, тогда запускать макрос,
'по факту - наоборот, т.е. при изменении фильтров получается что target в диапазон не попал. Бррр. Работает ведь... %О)
If Target.Cells.Count > 1 Or Intersect(Target, Range("A3:b4")) Is Nothing Then
' Exit Sub
Call qqq
End If
' Call qqq
End Sub
Кому решение нужно - тот пример и рисует.