Страницы: 1
RSS
Определение диапазона печати (VBA)
 
Во вложении файл, с которого надо распечатать бумажные копии.  
Как макросом задать область печати, что бы печатались ячейки А4:Е7, если в фильтрах сводной ничего не выбрано, А4:D6, если выбран только один день, А4:С6, если выбрано только а?  
Спасибо.    
 
 
8 Кб
 
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
Кому решение нужно - тот пример и рисует.
 
Спасибо, на первый взгляд это именно то что нужно!  
Потестю - отпишусь.
 
Хы-хы, вот я вчера затупииииил! :О)  
 
В модуль Лист4 надо вставить:  
 
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)  
   Call qqq  
End Sub  
 
 
И ВСЁ!!!!  
 
Уаха-ха-ха-ха-ха!... (удаляется громко смеясь над вчерашним заворотом мозга)
Кому решение нужно - тот пример и рисует.
Страницы: 1
Наверх