Прошу помощи в доработке макроса, чтобы автоматически задавать область печати на нескольких листах книги в пределах имеющихся значений. Прочитал форум нашел интересный топик - Задать одинаковую область печати для всех листов книги. Но отличие моей ситуации от предложенного в том топике решения заключается в том, что у меня на разных листах должна быть разная область печати, так как разный объем представленных на листах данных (таблицы с столбцами A:P, но разным количеством строк - от 10 до 60). Я несколько модифицировал предложенный Pelena код
Цитата
Sub www() Dim sh As Worksheet For Each sh In Sheets sh.PageSetup.PrintArea = "$A$1:$C$10" Next End Sub
и использовал в многолистовой книге следующий макрос: [vba]
Код
Sub ЗадатьОбластьПечатиДляВсехЛистов() Dim sh As Worksheet For Each sh In Sheets 'sh.PageSetup.PrintArea = "$A$1:$C$10" sh.PageSetup.PrintArea = _ ActiveCell.CurrentRegion.Address Next End Sub
[/vba] Однако в случае с макросом Pelen’ы область печати задается правильно и пустые страницы не распечатываются, а в случае с моим модицицированным макросом, кроме страницы с данными выводятся на печать две-три пустых. Прошу помощи. Спасибо.
Прошу помощи в доработке макроса, чтобы автоматически задавать область печати на нескольких листах книги в пределах имеющихся значений. Прочитал форум нашел интересный топик - Задать одинаковую область печати для всех листов книги. Но отличие моей ситуации от предложенного в том топике решения заключается в том, что у меня на разных листах должна быть разная область печати, так как разный объем представленных на листах данных (таблицы с столбцами A:P, но разным количеством строк - от 10 до 60). Я несколько модифицировал предложенный Pelena код
Цитата
Sub www() Dim sh As Worksheet For Each sh In Sheets sh.PageSetup.PrintArea = "$A$1:$C$10" Next End Sub
и использовал в многолистовой книге следующий макрос: [vba]
Код
Sub ЗадатьОбластьПечатиДляВсехЛистов() Dim sh As Worksheet For Each sh In Sheets 'sh.PageSetup.PrintArea = "$A$1:$C$10" sh.PageSetup.PrintArea = _ ActiveCell.CurrentRegion.Address Next End Sub
[/vba] Однако в случае с макросом Pelen’ы область печати задается правильно и пустые страницы не распечатываются, а в случае с моим модицицированным макросом, кроме страницы с данными выводятся на печать две-три пустых. Прошу помощи. Спасибо.pashkovsky
Проверьте, что выводит ActiveCell.CurrentRegion.Address
Вообще-то, насколько я понимаю, ActiveCell в момент исполнения макроса - это одна-единственная ячейка на текущем листе. От того,что вы обращаетесь к колллекций Sheets - ActiveCell не поменяется
Надо использовать что-то вроде [vba]
Код
For Each sh In Sheets sh.PageSetup.PrintArea = _ Intersect(sh.Range("A:P"), sh.usedrange).Address Next
Проверьте, что выводит ActiveCell.CurrentRegion.Address
Вообще-то, насколько я понимаю, ActiveCell в момент исполнения макроса - это одна-единственная ячейка на текущем листе. От того,что вы обращаетесь к колллекций Sheets - ActiveCell не поменяется
Надо использовать что-то вроде [vba]
Код
For Each sh In Sheets sh.PageSetup.PrintArea = _ Intersect(sh.Range("A:P"), sh.usedrange).Address Next
Уважаемые Pelena & AndreTM. Спасибо за Ваши советы. Прошу прощение за задержку с ответом - был забанен за нарушение правил форума. Виноват
Усовершенствовал макрос с учетом предложений AndreTM. Однако в процессе доработки понял, почему у меня появляется больше страниц - наверное, из-за работы другого макроса по автонумерации строк, которым вставляется формула расчета номеров строк. По всей видимости этот макрос и нарушает стройную работу макроса по заданию области печати? Прилагаю файл.
Уважаемые Pelena & AndreTM. Спасибо за Ваши советы. Прошу прощение за задержку с ответом - был забанен за нарушение правил форума. Виноват
Усовершенствовал макрос с учетом предложений AndreTM. Однако в процессе доработки понял, почему у меня появляется больше страниц - наверное, из-за работы другого макроса по автонумерации строк, которым вставляется формула расчета номеров строк. По всей видимости этот макрос и нарушает стройную работу макроса по заданию области печати? Прилагаю файл.pashkovsky
А, даже так... Первое - избавьтесь от Select..Selection - почитайте, пожалуйста. Второе - используйте либо формулы, либо макросы (код). Но не одновременно. Вы просто нарушаете логику использования - формулы считают, что их рабочую область никто не трогает (а когдатрогает - они возбуждённо пересчитываются), а макросы считают, что работают с данными, а не результатами вычислений, и что пустая ячейка - это именно незанятая ячейка, а не "пустая строка", полученная в результате вычислений формул или формата на листе
А, даже так... Первое - избавьтесь от Select..Selection - почитайте, пожалуйста. Второе - используйте либо формулы, либо макросы (код). Но не одновременно. Вы просто нарушаете логику использования - формулы считают, что их рабочую область никто не трогает (а когдатрогает - они возбуждённо пересчитываются), а макросы считают, что работают с данными, а не результатами вычислений, и что пустая ячейка - это именно незанятая ячейка, а не "пустая строка", полученная в результате вычислений формул или формата на листе AndreTM