VBA - печать нескольких именованных диапазонов с одного листа в указанном порядке

У меня есть vba, который выглядит так:

Sub Print_Info()

Worksheets("Scorecard (Monthly)").Activate
ActiveSheet.PageSetup.PrintArea = "P1,P2,P3,P4,P5"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview

End Sub

P1, P2 и т. д. – это именованные диапазоны, которые находятся на одном рабочем листе (ежемесячно). При запуске vba результирующая распечатка не выводится в правильном порядке (как указано в VBA) - я думаю, это потому, что на самом деле P1 и P2 находятся ниже P3, P4 и P5 на рабочем листе. Порядок страниц, которые печатаются при использовании vba: P4, P1, P2, P5, P3. Порядок страниц на листе: P3, P4, P5, P1, P2, поэтому порядок печати не имеет для меня никакого смысла при использовании VBA. Причина в том, что это ежемесячный отчет, но меня попросили регулярно предоставлять подмножество информации в немного другом порядке для другой аудитории, поэтому было бы удобно просто использовать некоторый VBA для повторно закажите распечатку, не касаясь фактического рабочего листа, так как он подходит для своей обычной цели.

Есть ли способ заставить Excel распечатать диапазон в одном файле в правильном порядке с одного листа? Я знаю, что мог бы сделать что-то вроде этого:

Sub Print_GSCB_Info()

Worksheets("Scorecard (Monthly)").Activate
ActiveSheet.PageSetup.PrintArea = "GSCB_P1"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview
ActiveSheet.PageSetup.PrintArea = "GSCB_P2"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview
ActiveSheet.PageSetup.PrintArea = "GSCB_P3"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview

End Sub

Однако это приведет к отправке отдельных «файлов» на принтер (что не идеально, поскольку номера страниц не следуют и т. д.).


person bawpie    schedule 13.10.2016    source источник


Ответы (2)


Итак, немного поискав в Google, я нашел это пост, в котором показан немного другой метод. Использование следующего VBA работает отлично, хотя я до сих пор не уверен, почему моя предыдущая попытка не сработала!

Sub Print_Info_v1()

Worksheets("Scorecard (Monthly)").Activate

ActiveSheet.Range("P1,P2,P3,P4,P5").PrintOut

End Sub
person bawpie    schedule 14.10.2016

Я не могу сказать вам, есть ли способ напрямую изменить порядок печати. Но вы можете использовать VBA для обходного пути всякий раз, когда хотите распечатать ежемесячный отчет:

  1. Создать новый лист
  2. Поместите диапазоны (P1-P5) в правильном порядке на этот лист.
  3. Распечатать лист
  4. Удалить лист

Преимущество этого решения: у вас может быть два разных макета для исходного шаблона и печатного документа.

person Lukas    schedule 13.10.2016
comment
Спасибо что нашли время ответить. Постараюсь сделать это, как вы говорите, это, вероятно, один из гарантированных способов заставить его работать. - person bawpie; 14.10.2016