Страницы: 1
RSS
Как выбрать принтер при печати
 
Добрый день,
Делаю файлы word из Excel. На принтер по умолчанию печатается без проблем.
Как можно выбрать определенный принтер?
Прошелся макрорекордером в Word и эту строчку ActivePrinter вставил в код, но ничего не получается. Как эту строчку правильно оформить?
Код
ActivePrinter = "HP LaserJet Pro7"
WDс.PrintOut Copies:=1, ManualDuplexPrint:=False, Collate:=1
WDс.SaveAs Filename
Изменено: cherepushka - 13.11.2019 09:25:50
 
Может поможет эта тема
Фишка вроде в том что Excel печатает только на принер по умолчанию, т.е. надо сначала поставить принер в коде по умолчанию, потом печатать, потом вернуть другое по умолчанию если требуется. Ну да Hugo так и пишет)
Изменено: venom51 - 13.11.2019 10:02:30
 
Спасибо за ссылку.
Сделал так, если дело в портах, но всё равно не устанавливается
Код
For i = 0 To 10
On Error Resume Next
Application.ActivePrinter = "HP LaserJet Pro7" & Format$(i, "00")
If Err.Number = 0 Then Exit For
Next i
    
If Not Application.ActivePrinter Like "HP LaserJet Pro*" Then
MsgBox "Невозможно установить принтер", vbCritical
Exit Sub
End If
Изменено: cherepushka - 13.11.2019 10:12:54
 
cherepushka,
По указанной ссылке последний пост  , только там нужно добавить Select * from Win32_Printer Where Caption= чтоб сразу нужный принтер получить и номер порта, а просто  & Format$(i, "00") - не достаточно. Но номер порта по другому вычисляется.
Изменено: БМВ - 13.11.2019 10:24:10
По вопросам из тем форума, личку не читаю.
 
БМВ, Спасибо за ответ.
А точно в Caption название принтера пихать?
Код
Set objPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Caption=HP LaserJet Pro7", , 48)
Изменено: cherepushka - 13.11.2019 10:39:10
 
cherepushka, ну все зависит от того с чем вы сравниваете, может Name, Caption, главное что без кавычек указывать нельзя, там же пробелы есть. Поищите, в темах мои и Андрея обсуждения по принтерам есть.
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=search&tags=&q=%D0%91%D0%9C%D0%92+Win32_Printer&FORUM_ID%5B%5D=0&DATE_CHANGE=0&order=relevance&s=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8
Изменено: БМВ - 13.11.2019 10:46:54
По вопросам из тем форума, личку не читаю.
 
БМВ,  Вы писали, что есть иное решение. Решил попробовать его.
Код
Set WshNetwork = CreateObject("Wscript.Network")
set objWMI = GetObject("winmgmts:\\.\root\cimv2")
set Printers = objWMI.ExecQuery("Select * From Win32_Printer Where Name like '%LaserJet%'")
For Each Printer In Printers
If Printer.Name = strPrinterName Then
WshNetwork.SetDefaultPrinter strPrinterName
End If
Next

Но он всё равно печатает на дефолтный принтер. И до меня не доходит как из этого кода программа поймет, что нужно это то, что снизу печатать на установленном принтере? По этой строчке WshNetwork.SetDefaultPrinter strPrinterName?
Код
WDс.PrintOut Copies:=1, ManualDuplexPrint:=False, Collate:=1
Изменено: cherepushka - 13.11.2019 11:28:52
 
БМВ, Большое спасибо. Проблема решена благодаря Вам.
Хорошая это вещь
Изменено: cherepushka - 13.11.2019 11:47:37
 
cherepushka, Если не ошибаюсь, то принтер по умолчанию из системы приложение подберет при запуске, по этому оперировать нужно ActivePrinter но там кроме имени нужно указывать номер порта, если принтер локальный, тут был про сетевой разговор. Сейчас просто некогда рзбираться. Но ничего сложного нет и получить порт для локального.
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts
Изменено: БМВ - 13.11.2019 11:54:57
По вопросам из тем форума, личку не читаю.
 
Добрый день всем.
Можно ли выбрать принтер только для печати, потому что сейчас после печати - принтер который выбирается становится дефолтным. Это понятно, что в коде стоит SetDefaultPrinter(), но можно ли сделать, чтобы выбрал принтер - напечатал, а по умолчанию не устанавливал?
Спасибо.

Код
Set colInstalledPrinters = objWMIService.ExecQuery _
    ("Select * from Win32_Printer Where Name  like 'LaserJetPro'")
  
    For Each objPrinter In colInstalledPrinters
    RES = objPrinter.SetDefaultPrinter()
    Next
Изменено: cherepushka - 20.11.2019 12:10:50
Страницы: 1
Наверх