VBA в Excel 2016 - установить настройки принтера в коде - PullRequest
0 голосов
/ 20 сентября 2018

Я искал в Интернете, но не могу найти точное решение для этого ... Мне нужно иметь возможность установить цвет и дуплекс для печати из моего кода VBA.

Мое намерениеиспользовать кнопку пользовательской формы VBA для форматирования, а затем распечатать таблицу из моей книги.Мой сокращенный код:

Application.PrintCommunication = False
With ws.PageSetup
    .PrintArea = first & ":" & last
    .PrintTitleRows = "$1:$1"
    .LeftHeader = "&9&D &T"
    .CenterHeader = "&A"
    .RightHeader = "&9Page &P of &N"
    .Orientation = xlLandscape
    .PaperSize = xlPaper11x17
    .LeftMargin = Application.InchesToPoints(0.25)
    .RightMargin = Application.InchesToPoints(0.25)
    .TopMargin = Application.InchesToPoints(0.5)
    .BottomMargin = Application.InchesToPoints(0.25)
    .HeaderMargin = Application.InchesToPoints(0.3)
    .FooterMargin = Application.InchesToPoints(0.3)
End With
Application.PrintCommunication = True

ws.PrintOut Preview:=True, ActivePrinter:="BODHPM750"

Это форматирует страницу и хорошо открывает окно предварительного просмотра, но по умолчанию используется черно-белая односторонняя печать (в соответствии с настройками принтера в офисе), если только я не вручнуюизменил его с момента открытия рабочей книги.Эти параметры связаны с принтером, а не с книгой, поэтому я не могу изменить их с помощью ws.PageSetup или в окне предварительного просмотра.

РЕДАКТИРОВАТЬ: Я также понял, что определение ActivePrinterне работаетПредварительный просмотр печати открывается для принтера по умолчанию, установленного на моем компьютере, который отличается от того, который я пытаюсь вызвать в моей команде ws.PrintOut.

Есть ли способ для меня установить этопечатать в цвете и дуплекс внутри этой кнопки нажмите?Я нашел информацию об использовании объекта «Принтер» в Access и других программах Office, но, похоже, его нет для Excel.

Для справки - я использую VBA в Excel 2016, а принтер -попытаться использовать HP Color LaserJet M750 PCL 6 на офисном сервере, если это актуально.

ОБНОВЛЕНИЕ: Устранена проблема с цветом.

1 Ответ

0 голосов
/ 20 сентября 2018

Частичное решение:

Настройки цвета могут быть выполнены через Page Setup

Объявление ActivePrinter в моем вызове PrintOut не работает, потому что у меня не было имени принтера точно так, как этого хотела система,Чтобы найти имя принтера, я установил в качестве активного принтера нужный принтер в диалоговом окне «Файл Excel»> «Печать», а затем вывел имя принтера следующим образом:

Для отображения в окне сообщения:

MsgBox Application.ActivePrinter

Чтобы вывести в ячейку, чтобы можно было скопировать и вставить текст:

Sheets("Sheet 1").Range("A1").Value = Application.ActivePrinter

В качестве обходного пути для изменения настроек принтера на дуплекс: измените активный принтер и откройте диалоговое окно печати передкоманда PrintOut: Application.ActivePrinter = "\ SHAHQPS2 \ BODHPM750DTN1P в Ne09:" Application.Dialogs (xlDialogPrinterSetup) .Show Это вызывает диалоговое окно, в котором можно изменить настройки принтера.

НЕ РАЗРЕШЕНО: По-прежнему ищите решение для изменения кода принтера в дуплекс в коде вместо открытия диалогового окна «Параметры печати».

Текущий код:

'Set print settings
Application.PrintCommunication = False  'Freeze print communication for efficiency
With ws.PageSetup
    .PrintArea = first & ":" & last
    .PrintTitleRows = "$1:$1"
    .LeftHeader = "&9&D &T"
    .CenterHeader = "&A"
    .RightHeader = "&9Page &P of &N"
    .Orientation = xlLandscape
    .PaperSize = xlPaper11x17
    .LeftMargin = Application.InchesToPoints(0.25)
    .RightMargin = Application.InchesToPoints(0.25)
    .TopMargin = Application.InchesToPoints(0.5)
    .BottomMargin = Application.InchesToPoints(0.25)
    .HeaderMargin = Application.InchesToPoints(0.3)
    .FooterMargin = Application.InchesToPoints(0.3)
End With
Application.PrintCommunication = True   'Restart print communication

'Set active printer to desired printer so print dialog box defaults to highlighting
'that printer; then open print dialog box so printer settings can be set to print
'duplex before the print preview comes up
'Note: could also use this to choose between printers
Application.ActivePrinter = "BODHPM750 on Ne09:"
Application.Dialogs(xlDialogPrinterSetup).Show

'Send to printer (preview first)
ws.PrintOut Preview:=True, ActivePrinter:="BODHPM750 on Ne09:"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...