Допустим имя принтера сработает и порт не надо будет прописывать.
Как послать активный лист экселя который содержит много разрывов страниц на принтер указанный в макросе отличный от дефолтного и чтобы макрос не менял дефолтный принтер. Просто при нажатии отправлял на прописаный принтер.
Допустим имя принтера сработает и порт не надо будет прописывать.
Как послать активный лист экселя который содержит много разрывов страниц на принтер указанный в макросе отличный от дефолтного и чтобы макрос не менял дефолтный принтер. Просто при нажатии отправлял на прописаный принтер.koyaanisqatsi
Sub dd() ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Microsoft XPS Document Writer"' Вместо "Microsoft XPS Document Writer" - впишите нужный принтер End Sub
[/vba] На первый взгляд - то что нужно Чтоб вернуть принтер назад: Application.ActivePrinter = "MyPrinter" ' Вместо MyPrinter вписать нужный принтер.
Sub dd() ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Microsoft XPS Document Writer"' Вместо "Microsoft XPS Document Writer" - впишите нужный принтер End Sub
[/vba] На первый взгляд - то что нужно Чтоб вернуть принтер назад: Application.ActivePrinter = "MyPrinter" ' Вместо MyPrinter вписать нужный принтер.
К теме наверно уже не относится только непонятно что делать с таким явлением. Я не знаю от чего это зависит и будет ли менятся в дальнейшем. Принтер на который надо послать пока называется так "ZDesigner GC420d (перенаправлено 19)" Меня вот конкретно это смущает " (перенаправлено 19)" вижу в списках часто что за принтером пишется такая зяба и цифры разные. Если для этого номер изменится то по кнопке и печать не пойдет (
К теме наверно уже не относится только непонятно что делать с таким явлением. Я не знаю от чего это зависит и будет ли менятся в дальнейшем. Принтер на который надо послать пока называется так "ZDesigner GC420d (перенаправлено 19)" Меня вот конкретно это смущает " (перенаправлено 19)" вижу в списках часто что за принтером пишется такая зяба и цифры разные. Если для этого номер изменится то по кнопке и печать не пойдет (koyaanisqatsi
Так воспользуйтесь проверкой наличия принтера в списке доступных. Вы же в теме спрашивали про список доступных принтеров Если нужный принтер есть - печатаем, если нет - предлагаем выбрать из списка, или выходим... как то так [vba]
Код
Sub Отправка_листа_на_нужный_принтер_c_проверкой() Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$ primary_printer = "doPDF v9" ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию aPr = Application.ActivePrinter Set AllPrinters = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_Printer", , 48) 'Получаем список принтеров For Each printer In AllPrinters n = n + 1 s = s & vbCr & n & ": " & printer.name If printer.name = primary_printer Then print_name = primary_printer: Exit For ' если primary_printer найден в списке доступных Next s = Right(s, Len(s) - 1) 'Если такого принтера не найдено: If print_name = "" Then If InStr(1, s, vbCr, vbTextCompare) = 0 Then MsgBox "Error no printers": Exit Sub m = Split(s, vbCr) n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1) If n > UBound(m) Or n = 0 Then MsgBox "Error no printers with this number": Exit Sub print_name = Split(m(n - 1), " ", 2)(1) End If '=============================== ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name Application.ActivePrinter = aPr ' Возврат активного принтера End Sub
[/vba]
Так воспользуйтесь проверкой наличия принтера в списке доступных. Вы же в теме спрашивали про список доступных принтеров Если нужный принтер есть - печатаем, если нет - предлагаем выбрать из списка, или выходим... как то так [vba]
Код
Sub Отправка_листа_на_нужный_принтер_c_проверкой() Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$ primary_printer = "doPDF v9" ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию aPr = Application.ActivePrinter Set AllPrinters = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_Printer", , 48) 'Получаем список принтеров For Each printer In AllPrinters n = n + 1 s = s & vbCr & n & ": " & printer.name If printer.name = primary_printer Then print_name = primary_printer: Exit For ' если primary_printer найден в списке доступных Next s = Right(s, Len(s) - 1) 'Если такого принтера не найдено: If print_name = "" Then If InStr(1, s, vbCr, vbTextCompare) = 0 Then MsgBox "Error no printers": Exit Sub m = Split(s, vbCr) n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1) If n > UBound(m) Or n = 0 Then MsgBox "Error no printers with this number": Exit Sub print_name = Split(m(n - 1), " ", 2)(1) End If '=============================== ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name Application.ActivePrinter = aPr ' Возврат активного принтера End Sub
SLAVICK, Еще раз спасибо. Макрос работает почти идеально. Внедрил. Отчитываюсь о работе.
1. Если при выборе принтера нажать эскейп то выдает сообщение об ошибке. Дебаг в строке [vba]
Код
n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1)
[/vba]
2. После отправки на печать если все хорошо сам эксель или макрос подвешивается на секунды 3-5 где-то. Наверно это плохо.
Скорее всего второе важнее чем первое.
И еще маленький вопросик. Если я создам отдельную страницу для того что бы этот макрос брал оттуда название принтера. Как это написать в самом макросе ? просто тут такая проблемака что имя принтера не статично вчера допустим было ZDesigner GC420d (перенаправлено 16) а завтра будет к примеру ZDesigner GC420d (перенаправлено 21)
Если бы можно было в ячейке изменять а в идеале сохранять макросом и брать оттуда последний выбранный принтер то было бы просто идеально. Ну скажем страница будет называться Принтер ячейка любая.
Заранее благодарен.
SLAVICK, Еще раз спасибо. Макрос работает почти идеально. Внедрил. Отчитываюсь о работе.
1. Если при выборе принтера нажать эскейп то выдает сообщение об ошибке. Дебаг в строке [vba]
Код
n = InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1)
[/vba]
2. После отправки на печать если все хорошо сам эксель или макрос подвешивается на секунды 3-5 где-то. Наверно это плохо.
Скорее всего второе важнее чем первое.
И еще маленький вопросик. Если я создам отдельную страницу для того что бы этот макрос брал оттуда название принтера. Как это написать в самом макросе ? просто тут такая проблемака что имя принтера не статично вчера допустим было ZDesigner GC420d (перенаправлено 16) а завтра будет к примеру ZDesigner GC420d (перенаправлено 21)
Если бы можно было в ячейке изменять а в идеале сохранять макросом и брать оттуда последний выбранный принтер то было бы просто идеально. Ну скажем страница будет называться Принтер ячейка любая.
n = Val(InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1))
[/vba] 2. возможно(у меня нет задержек). Макрос изменяет активность принтера(два раза на указанный, а потом на первоначальный). Если принтер сетевой- нужно ему отправить запрос, и получить с него ответ. Тут вопрос быстродействия связи сетки... Кроме того изменяются параметры печати согласно этому принтеру. Чем больше документ, тем больше нужно изменять. Не думаю, что это можно как-то исправить 3. так укажите полный путь к ячейке с листом например: [vba]
Код
primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
[/vba]
1. исправьте строку на: [vba]
Код
n = Val(InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1))
[/vba] 2. возможно(у меня нет задержек). Макрос изменяет активность принтера(два раза на указанный, а потом на первоначальный). Если принтер сетевой- нужно ему отправить запрос, и получить с него ответ. Тут вопрос быстродействия связи сетки... Кроме того изменяются параметры печати согласно этому принтеру. Чем больше документ, тем больше нужно изменять. Не думаю, что это можно как-то исправить 3. так укажите полный путь к ячейке с листом например: [vba]
Код
primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
SLAVICK, Спасибо. А чтобы он сохранял в ячейку последний выбранный если не нашел предыдущий принтер так можно ? Или придется самостоятельно в той ячейке исправлять название принтера на новое текущее если изменится последнее число в названии принтера ?
С сетью понял, мы посылаем с сервера на локальный принтер. Хотя если без макроса посылать такой задержки нет. Ну ладно. Остальное все работает кроме сохранения последнего выбранного принтера в ячейку на странице printer в A1
SLAVICK, Спасибо. А чтобы он сохранял в ячейку последний выбранный если не нашел предыдущий принтер так можно ? Или придется самостоятельно в той ячейке исправлять название принтера на новое текущее если изменится последнее число в названии принтера ?
С сетью понял, мы посылаем с сервера на локальный принтер. Хотя если без макроса посылать такой задержки нет. Ну ладно. Остальное все работает кроме сохранения последнего выбранного принтера в ячейку на странице printer в A1koyaanisqatsi
Сообщение отредактировал koyaanisqatsi - Понедельник, 16.02.2015, 16:40