Есть Эксель 2010. Есть несколько принтеров один из них зебра (usb) один hp (usb) и есть еще сетевые hp. На Зебру уходят только этикетки из одного файла. Делать Зебру дефолтовский не камильфо. Очень часто, почти всегда сталкиваюсь с проблемой плохого отклика экселя после отправки на этот принтер при помощи макроса который привел ниже для примера. Макрос выполняет следующую функцию На определенном листе в определенную ячейку сохраняет название последнего выбранного принтера. Если оно совпадает с одним из принтеров текущего списка то просто печатает на него. Если название принтера изменилось то предлагает человеку выбрать на какой отправлять. Все как бы очень просто. НО если я посылаю одну этикетку то сколько думать будет комп над этой операции весьма актуально а думать он может секунд 15. Я как-то уже решал эту проблему но не помню как(((( Пока что я смог наковырять это вот: Если я открываю этот файл в экселе и перед тем как воспользоватся макросом печати сам захожу в меню ПЕЧАТЬ и выбираю там нужный притер а потом могу выйти из этого меню и запустить макрос то отклик происходит уже мгновенно. послал одну этикетку тут же могу печатать с другого листа. Также если дефолтовский принтер является сам Зебра. тоже отклик мгновенный получается.
Но когда макросу надо запросить список принтеров перевыбрать если неправильно выбран послать на печать. В принципе до сих пор все тоже очень быстро а вот когда этикетка уже напечатана и макросу надо вернуть дефолтовский принтер на место вот тут происходят тормоза секунд на 15. Если я печатаю этикеток 50 то конечно я этого могу и не заметить так как все-равно жду пока принтер все напечатает. Ну и соответственно у макроса есть время чтобы вернуть дефолтовский принтер на место. Но это только по ощущениям. Как запускать тайпер выполнения операций макроса я не знаю. Курил эту тему но так и не дошел мозгом до воплощения этого в жизнь.
Надеюсь кто-то сталкивался с такой проблемой и знает как можно разобраться с принтерами ?
[vba]
Код
Sub Печать_на_Zebra() Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$ primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию ' primary_printer = "ZDesigner GC420d (перенаправлено 16)" ' Вместо "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 = Val(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) Sheets("printer").Cells(1, "a").Value = print_name End If '=============================== ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name Application.ActivePrinter = aPr ' Возврат активного принтера End Sub
[/vba]
Ну и пометочка к правилу прикладывать файл. Час потратил времени чтобы удалить все лишнее из файла оставил несколько страниц на страницах почти ничего не оставил кроме того что нужно, по факту самый мизир. Реально мало информации. Но так и не понял почему файлвесит 910 килобайт. В итоге в соответствии с правилами его выложить не могу. Теоретически могу на своем сайте его опубликовать как ссылка на файл. Но только с разрешения администраторов. Спасибо.
Добрый вечер.
Есть Эксель 2010. Есть несколько принтеров один из них зебра (usb) один hp (usb) и есть еще сетевые hp. На Зебру уходят только этикетки из одного файла. Делать Зебру дефолтовский не камильфо. Очень часто, почти всегда сталкиваюсь с проблемой плохого отклика экселя после отправки на этот принтер при помощи макроса который привел ниже для примера. Макрос выполняет следующую функцию На определенном листе в определенную ячейку сохраняет название последнего выбранного принтера. Если оно совпадает с одним из принтеров текущего списка то просто печатает на него. Если название принтера изменилось то предлагает человеку выбрать на какой отправлять. Все как бы очень просто. НО если я посылаю одну этикетку то сколько думать будет комп над этой операции весьма актуально а думать он может секунд 15. Я как-то уже решал эту проблему но не помню как(((( Пока что я смог наковырять это вот: Если я открываю этот файл в экселе и перед тем как воспользоватся макросом печати сам захожу в меню ПЕЧАТЬ и выбираю там нужный притер а потом могу выйти из этого меню и запустить макрос то отклик происходит уже мгновенно. послал одну этикетку тут же могу печатать с другого листа. Также если дефолтовский принтер является сам Зебра. тоже отклик мгновенный получается.
Но когда макросу надо запросить список принтеров перевыбрать если неправильно выбран послать на печать. В принципе до сих пор все тоже очень быстро а вот когда этикетка уже напечатана и макросу надо вернуть дефолтовский принтер на место вот тут происходят тормоза секунд на 15. Если я печатаю этикеток 50 то конечно я этого могу и не заметить так как все-равно жду пока принтер все напечатает. Ну и соответственно у макроса есть время чтобы вернуть дефолтовский принтер на место. Но это только по ощущениям. Как запускать тайпер выполнения операций макроса я не знаю. Курил эту тему но так и не дошел мозгом до воплощения этого в жизнь.
Надеюсь кто-то сталкивался с такой проблемой и знает как можно разобраться с принтерами ?
[vba]
Код
Sub Печать_на_Zebra() Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$ primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию ' primary_printer = "ZDesigner GC420d (перенаправлено 16)" ' Вместо "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 = Val(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) Sheets("printer").Cells(1, "a").Value = print_name End If '=============================== ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name Application.ActivePrinter = aPr ' Возврат активного принтера End Sub
[/vba]
Ну и пометочка к правилу прикладывать файл. Час потратил времени чтобы удалить все лишнее из файла оставил несколько страниц на страницах почти ничего не оставил кроме того что нужно, по факту самый мизир. Реально мало информации. Но так и не понял почему файлвесит 910 килобайт. В итоге в соответствии с правилами его выложить не могу. Теоретически могу на своем сайте его опубликовать как ссылка на файл. Но только с разрешения администраторов. Спасибо.koyaanisqatsi
если нужно выбирать принтер, я обычно таким кодом пользуюсь [vba]
Код
Sub Print2OtherPrinter() Dim aPrn: aPrn = ActivePrinter If Application.Dialogs(xlDialogPrinterSetup).Show Then _ ActiveWindow.SelectedSheets.PrintOut Copies:=1 ActivePrinter = aPrn End Sub
[/vba]
если нужно выбирать принтер, я обычно таким кодом пользуюсь [vba]
Код
Sub Print2OtherPrinter() Dim aPrn: aPrn = ActivePrinter If Application.Dialogs(xlDialogPrinterSetup).Show Then _ ActiveWindow.SelectedSheets.PrintOut Copies:=1 ActivePrinter = aPrn End Sub
krosav4ig, Я хотел чтобы эксель запоминал текущий принтер при запуске макроса печати сравнивал сохраненный в ячейки со списком принтеров если такой есть то отправлял бы на сохраненный в ячейке если такого нет то надо выбрать из списка куда отправить. После отправки вернуть текущий. Несколько сложнее задача (.... Почему все так сложно ? Потому что имя принтера на который отправлять надо из этого файла часто меняется. А меняется в названии цыферки после слов перенаправлено. Если бы имя принтера всегда было одинаково то можно было бы использовать сохраненное название в ячейке.
P.S: Заметил еще такую штуку. На том компе очень долго открывается окно Устройства и Принтеры. Дома открыл почти сразу открылось.
krosav4ig, Я хотел чтобы эксель запоминал текущий принтер при запуске макроса печати сравнивал сохраненный в ячейки со списком принтеров если такой есть то отправлял бы на сохраненный в ячейке если такого нет то надо выбрать из списка куда отправить. После отправки вернуть текущий. Несколько сложнее задача (.... Почему все так сложно ? Потому что имя принтера на который отправлять надо из этого файла часто меняется. А меняется в названии цыферки после слов перенаправлено. Если бы имя принтера всегда было одинаково то можно было бы использовать сохраненное название в ячейке.
P.S: Заметил еще такую штуку. На том компе очень долго открывается окно Устройства и Принтеры. Дома открыл почти сразу открылось.koyaanisqatsi
Сообщение отредактировал koyaanisqatsi - Четверг, 14.01.2016, 03:57
На том компе очень долго открывается окно Устройства и Принтеры. Дома открыл почти сразу открылось.
koyaanisqatsi, На сколько я помню - Вы уже задавали подобный вопрос ранее.(могу ошибаться) Скорее всего это связано с наличием принтеров подключенных по сети. В первый раз когда Вы запускаете окно - проверяется доступность принтеров по сети - потому и долго. Потом происходит индексация(запоминание системой) доступных принтеров и уже окно открывается быстро. Дома у Вас - сетки нет - поэтому быстро.
На том компе очень долго открывается окно Устройства и Принтеры. Дома открыл почти сразу открылось.
koyaanisqatsi, На сколько я помню - Вы уже задавали подобный вопрос ранее.(могу ошибаться) Скорее всего это связано с наличием принтеров подключенных по сети. В первый раз когда Вы запускаете окно - проверяется доступность принтеров по сети - потому и долго. Потом происходит индексация(запоминание системой) доступных принтеров и уже окно открывается быстро. Дома у Вас - сетки нет - поэтому быстро.SLAVICK
SLAVICK, Да вы совершенно правы я уже однажды мучался с этой проблемой. Но как-то ее сумел решить и забыл как(((( Теперь по новой мучуюсь. Попробую все принтеры удалить вдруг поможет. Возможно была бы логика в этих словах. Хотя может быть она и есть. Но есть одно но. Дело в том что как я понимаю первый запуск макроса запрашивает список принтеров. И наверно должен происходить индекс но он не происходит. Но когда я захожу в меню ПЕЧАТЬ не только мне надо кликнуть и развернуть все принтеры чтобы их увидеть в диалоговом окне, но и именно выбрать Зебру. В этот момент в экселе происходит что-то типа верстки под страницу выделенного фрагмента для печати "Страница" виртуальная - этикетка. Так вот можно даже после выбора этого принтера не производить печать, а нажимать эскейп после чего все этикетки имеют отклик достаточный для нормальной работы. Чего не происходит после одного или нескольких повторов печати по макросу. То-есть скорее всего не в индексации дело. А в каком-то другом процессе разных размеров может быть принтеров физического размера листа. Не знаю трудно предположить в чем может быть затык.
На каждой страничке есть формула области печати. Не знаю может ли это иметь значение ?
SLAVICK, Да вы совершенно правы я уже однажды мучался с этой проблемой. Но как-то ее сумел решить и забыл как(((( Теперь по новой мучуюсь. Попробую все принтеры удалить вдруг поможет. Возможно была бы логика в этих словах. Хотя может быть она и есть. Но есть одно но. Дело в том что как я понимаю первый запуск макроса запрашивает список принтеров. И наверно должен происходить индекс но он не происходит. Но когда я захожу в меню ПЕЧАТЬ не только мне надо кликнуть и развернуть все принтеры чтобы их увидеть в диалоговом окне, но и именно выбрать Зебру. В этот момент в экселе происходит что-то типа верстки под страницу выделенного фрагмента для печати "Страница" виртуальная - этикетка. Так вот можно даже после выбора этого принтера не производить печать, а нажимать эскейп после чего все этикетки имеют отклик достаточный для нормальной работы. Чего не происходит после одного или нескольких повторов печати по макросу. То-есть скорее всего не в индексации дело. А в каком-то другом процессе разных размеров может быть принтеров физического размера листа. Не знаю трудно предположить в чем может быть затык.
На каждой страничке есть формула области печати. Не знаю может ли это иметь значение ?
В этот момент в экселе происходит что-то типа верстки под страницу выделенного фрагмента для печати "Страница" виртуальная - этикетка.
так и есть - а если вручную выбрать принтер? тоже подвисает? Кстати, судя по этой теме так и не решили У Вас наверно много страниц в документе. Вы долго в том документе работаете - может есть смысл возвращать дефолтный принтер при закрытии книги? - тогда не будет частая смена принтера.
В этот момент в экселе происходит что-то типа верстки под страницу выделенного фрагмента для печати "Страница" виртуальная - этикетка.
так и есть - а если вручную выбрать принтер? тоже подвисает? Кстати, судя по этой теме так и не решили У Вас наверно много страниц в документе. Вы долго в том документе работаете - может есть смысл возвращать дефолтный принтер при закрытии книги? - тогда не будет частая смена принтера.SLAVICK
SLAVICK, Да возможно это хорошая идея. Про возврат дефолтного принтера по закрытию книги. А как это в макросе написать ? Страниц не много и не мало, но негативный временной эффект остался даже на урезанном файле до одной страницы с этикеткой.
"а если вручную выбрать принтер? тоже подвисает?" Я же писал что Если в меню печать раскрыть весь список принтеров то ситуация не поменяется но если выбрать зебру и не нажимать печать а просто выйти то все печатается по макросу быстро. Я вот только не знаю если через эскейп выходишь не печатая уже эксель его выбирает как дефолтный для данной книги наверно да, тогда совпадает с тем случаем когда зебра выбрана основным для печати.? Тогда скорее всего по закрытию книги возврат дефолтного принтера должно решить этот вопрос.
Тогда я решил проблему говорю же ) Но не помню как. Когда все работало хорошо драйвера были странно как-то у зебры установлены. В свойства принтера почему-то мог войти только через выпадающее меню внутри клика по принтеры. ХМ чето запутано объяснил. Короче кликал на принтер там есть в менюшке подменю свойства принтера она еще на два принтера разворачивалась вернее на два драйвера один EPL от зебры второй обычный, если правильно помню название. Причем EPL почему-то не удалялся. Удалял а он сразу же обратно ставился сам по себе. Печатал я на стандартном драйвере а не через EPL. Теперь драйвера ставятся в как два отдельных принтера прямо в Устройствах и Принтерах и можно удалить EPL. Но может и не в этом была фишка хотя кто его знает. Может я какую-то хитрую опцию тогда нашел в свойствах драйвера.
SLAVICK, Да возможно это хорошая идея. Про возврат дефолтного принтера по закрытию книги. А как это в макросе написать ? Страниц не много и не мало, но негативный временной эффект остался даже на урезанном файле до одной страницы с этикеткой.
"а если вручную выбрать принтер? тоже подвисает?" Я же писал что Если в меню печать раскрыть весь список принтеров то ситуация не поменяется но если выбрать зебру и не нажимать печать а просто выйти то все печатается по макросу быстро. Я вот только не знаю если через эскейп выходишь не печатая уже эксель его выбирает как дефолтный для данной книги наверно да, тогда совпадает с тем случаем когда зебра выбрана основным для печати.? Тогда скорее всего по закрытию книги возврат дефолтного принтера должно решить этот вопрос.
Тогда я решил проблему говорю же ) Но не помню как. Когда все работало хорошо драйвера были странно как-то у зебры установлены. В свойства принтера почему-то мог войти только через выпадающее меню внутри клика по принтеры. ХМ чето запутано объяснил. Короче кликал на принтер там есть в менюшке подменю свойства принтера она еще на два принтера разворачивалась вернее на два драйвера один EPL от зебры второй обычный, если правильно помню название. Причем EPL почему-то не удалялся. Удалял а он сразу же обратно ставился сам по себе. Печатал я на стандартном драйвере а не через EPL. Теперь драйвера ставятся в как два отдельных принтера прямо в Устройствах и Принтерах и можно удалить EPL. Но может и не в этом была фишка хотя кто его знает. Может я какую-то хитрую опцию тогда нашел в свойствах драйвера.koyaanisqatsi
тоже подвисает?" Я же писал что Если в меню печать раскрыть весь список принтеров то ситуация не поменяется но если выбрать зебру и не нажимать печать а просто выйти то все печатается по макросу быстро
Я имел ввиду если выбрать нужный принтер вручную, и нажать эскейп - excel подвисает сразу после этого(без запуска макроса сразу после нажатия эскейп)
Смотрите пример. Поменял немного код. Поменял процедуру для списка всех принтеров. А выбор принтера позаимствовал у krosav4ig - так проще и удобнее. (надеюсь он не против) При открытии книги - происходит поиск введенного принтера и его назначение активным. При закрытии книге - возврат принтера, который был активным до открытия. Пока книга открыта - активным будет введенный принтер. Сделал макросы отдельно - чтобы можно было запускать также и опционно
тоже подвисает?" Я же писал что Если в меню печать раскрыть весь список принтеров то ситуация не поменяется но если выбрать зебру и не нажимать печать а просто выйти то все печатается по макросу быстро
Я имел ввиду если выбрать нужный принтер вручную, и нажать эскейп - excel подвисает сразу после этого(без запуска макроса сразу после нажатия эскейп)
Смотрите пример. Поменял немного код. Поменял процедуру для списка всех принтеров. А выбор принтера позаимствовал у krosav4ig - так проще и удобнее. (надеюсь он не против) При открытии книги - происходит поиск введенного принтера и его назначение активным. При закрытии книге - возврат принтера, который был активным до открытия. Пока книга открыта - активным будет введенный принтер. Сделал макросы отдельно - чтобы можно было запускать также и опционно SLAVICK
SLAVICK, "и нажать эскейп - excel подвисает сразу после этого(без запуска макроса сразу после нажатия эскейп)" Нет не подвисает. Просто проходит секунда или пол по переразмещению на листе выделенного фрагмента или листа с областью печати. Спасибо проверю отпишусь. Но скорее всего будет работать как надо. [moder]Для вставки цитаты есть специальная кнопка. Посмотрите как у меня в постах. Используйте ее. Нужно выделить текст, который Вы хотите процитировать и нажать кнопку[/moder]
SLAVICK, "и нажать эскейп - excel подвисает сразу после этого(без запуска макроса сразу после нажатия эскейп)" Нет не подвисает. Просто проходит секунда или пол по переразмещению на листе выделенного фрагмента или листа с областью печати. Спасибо проверю отпишусь. Но скорее всего будет работать как надо. [moder]Для вставки цитаты есть специальная кнопка. Посмотрите как у меня в постах. Используйте ее. Нужно выделить текст, который Вы хотите процитировать и нажать кнопку[/moder]koyaanisqatsi
Сообщение отредактировал SLAVICK - Пятница, 15.01.2016, 16:24
SLAVICK, Да уж. Проблема то была в одной запятой. ) Просто в изначальном коде забанил строку возврата дефолтного принтера и все стало как надо, а принтер не для винды выбирался а именно для книги так что когда книга закрывается всеравно принтер остается как и был до открытия файла. Вот только это не сработает если эксель не закрыть но даладно там будет видно. Главное уже есть инструменты ) За что огромное спасибо ! . Тормозит только при открытии самого файла. Но это можно пережить. Ваш код тоже сохранил если понадобится в будущем то и хорошо )
SLAVICK, Да уж. Проблема то была в одной запятой. ) Просто в изначальном коде забанил строку возврата дефолтного принтера и все стало как надо, а принтер не для винды выбирался а именно для книги так что когда книга закрывается всеравно принтер остается как и был до открытия файла. Вот только это не сработает если эксель не закрыть но даладно там будет видно. Главное уже есть инструменты ) За что огромное спасибо ! . Тормозит только при открытии самого файла. Но это можно пережить. Ваш код тоже сохранил если понадобится в будущем то и хорошо )koyaanisqatsi
koyaanisqatsi, Мне нужно было сменить принтер при открытии документа Word, не меняя системный принтер по-умолчанию. В редакторе VBA: Project Normal +Microsoft Word Объекты -+ThisDocument [vba]
Код
Private Sub Document_Open() 'ActivePrinter = "Adobe PDF" - эта команда меняет системный принтер по-умолчанию (задержка на 15 секунд). WordBasic.FilePrintSetup Printer:="Adobe PDF", DoNotSetAsSysDefault:=1 End Sub
[/vba]
koyaanisqatsi, Мне нужно было сменить принтер при открытии документа Word, не меняя системный принтер по-умолчанию. В редакторе VBA: Project Normal +Microsoft Word Объекты -+ThisDocument [vba]
Код
Private Sub Document_Open() 'ActivePrinter = "Adobe PDF" - эта команда меняет системный принтер по-умолчанию (задержка на 15 секунд). WordBasic.FilePrintSetup Printer:="Adobe PDF", DoNotSetAsSysDefault:=1 End Sub