макрос для двусторонней печати диапазонов на одном листе с разной ориентацией

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
clar
Сообщения: 15
Зарегистрирован: 25 фев 2013, 13:59

Здравствуйте,
помогите, пожалуйста, создать макрос (Excel) для двусторонней печати на одном листе:
диапазон A1:Q50 - книжная ориентация на 1 лист,
диапазон T10:AQ25- альбомная ориентация на оборотной стороне листа
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Если воспользоваться записью макроса (макрорекордером), то получается что-то вроде нижеопубликованного кода :

Код: Выделить всё

Private Sub Test()
    With ActiveSheet.PageSetup
         .PrintArea = "A1:Q50"
         .Orientation = xlPortrait
         .FitToPagesWide = 1
         .FitToPagesTall = 1
         .Parent.PrintOut
         
         MsgBox "Переверните лист для печати", vbInformation, ""
         
         .PrintArea = "T10:AQ25"
         .Orientation = xlLandscape
         .FitToPagesWide = 1
         .FitToPagesTall = 1
         .Parent.PrintOut
    End With
End Sub
А ежели после печати нужно сбросить установленные настройки, то, опять же, макрорекордер выдаёт следущее :

Код: Выделить всё

ActiveSheet.PageSetup.PrintArea = "" 'Сброс области печати
ActiveSheet.ResetAllPageBreaks     'Сброс разрывов страниц
clar
Сообщения: 15
Зарегистрирован: 25 фев 2013, 13:59

Спасибо, можно создать в макросе:
1) чтобы подача бумаги (переворот) был не ручная, а автоматическая
2) создать кнопку для этого макроса на панели.

Заранее спасибо
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

1) Если такая возможность и существует, то мне она неизвестна, ибо с принтерами, которые выполняют все мои обязанности, лично я, не сталкивался. Но даже если она и есть, уверен, что зависит она от модели принтера и вряд ли напрямую "управляется" командами VBA.
P.S. Возможно, используя соответствующие функции WinAPI, Вы и сможете добиться желаемого ... но возможности проверить эту гипотезу, у меня, увы, нет.
2) В XL97-2003 легко, следующие версии уже не ко мне :)
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

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

Т.к. статья касается "чистого" VB и в примере используется об'ект Printer, которого нет в VBA, то Printer.DeviceName можно попробовать заменить на Application.ActivePrinter и если это не прокатит, то на переменную strPrinter

Код: Выделить всё

Dim strPrinter As String
strPrinter = Application.ActivePrinter
      
If strPrinter Like "*(* :) " Then
   strPrinter = RTrim(Left(strPrinter, InStrRev(strPrinter, "(") - 1))
End If
Ответить