Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Двухсторонняя печать средствами VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Двухсторонняя печать средствами VBA
Bagir Дата: Вторник, 12.10.2010, 12:18 | Сообщение № 1
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Постараюсь изложить проблему не вдаваясь в ненужные детали.
Я уже несколько лет пишу простенький софт на VBA для заполнения налоговых деклараций. Excel + VBA позволяют быстренько состряпать ново введенную форму, а сроки, это для меня главное.
Идет много печати, и в процессе нужно отправлять одни задания с дуплексом, другие просто на одной стороне. У команды PrintOut нет параметров выбора дуплекса. Да и простого пути тут тоже нет. Сейчас пользуюсь прогой FinePrint. Отправляю печать на нее, а она может перенаправить на выбранный принтер с указанием флага дуплекса. Способ не полностью автоматизировал работу. Оператору нужно каждый раз выбирать, с дуплексом или без, раз уж я не могу это делать средствами VBA.
Что получилось найти:
Есть два способа переключить дуплекс. Первый полностью на VBA, второй использует стороннюю dll библиотеку.
У этих способов есть общий минус. Они меняют параметры принтера не в Excel, а общие (Пуск -> Принтеры). Это конечно неудобство, но с ним можно мириться. Оба способа рабочие, но столкнулся с такой проблемой. Я не могу поменять дуплекс у принтера, если он выбран активным в Excel (2003). То есть поменять то я могу, и после запуска VBA дуплекс действительно переключится, и это можно увидеть открыв свойства принтера из проводника Windiws, но не из Excel. Нашел только следующее решение:
- Делаем нужный принтер не активным (выбираем любой другой).
- Переключаем дуплекс нужному принтеру
- Выбираем его активным.
Тогда настройки будут прочитаны. Способ тоже не очень, и похоже нужна задержка после переключения, но он пока единственный.
Я прикладываю примеры в файле, чтобы не раздувать тему тут.
В примере есть еще разные модуля, думаю они будут интересны тем, кто изучает тему печати.
Хотелось бы обсудить модуль PrinterDuplexVBA Function TestPrinter()
Неплохо бы было изменять не общие настройки драйвера а только настройки активного принтера Excel, чтобы это не касалось других программ.
К сообщению приложен файл: DuplexPrint.xls (78.5 Kb)


Сообщение отредактировал Bagir - Вторник, 12.10.2010, 12:19
 
Ответить
СообщениеПостараюсь изложить проблему не вдаваясь в ненужные детали.
Я уже несколько лет пишу простенький софт на VBA для заполнения налоговых деклараций. Excel + VBA позволяют быстренько состряпать ново введенную форму, а сроки, это для меня главное.
Идет много печати, и в процессе нужно отправлять одни задания с дуплексом, другие просто на одной стороне. У команды PrintOut нет параметров выбора дуплекса. Да и простого пути тут тоже нет. Сейчас пользуюсь прогой FinePrint. Отправляю печать на нее, а она может перенаправить на выбранный принтер с указанием флага дуплекса. Способ не полностью автоматизировал работу. Оператору нужно каждый раз выбирать, с дуплексом или без, раз уж я не могу это делать средствами VBA.
Что получилось найти:
Есть два способа переключить дуплекс. Первый полностью на VBA, второй использует стороннюю dll библиотеку.
У этих способов есть общий минус. Они меняют параметры принтера не в Excel, а общие (Пуск -> Принтеры). Это конечно неудобство, но с ним можно мириться. Оба способа рабочие, но столкнулся с такой проблемой. Я не могу поменять дуплекс у принтера, если он выбран активным в Excel (2003). То есть поменять то я могу, и после запуска VBA дуплекс действительно переключится, и это можно увидеть открыв свойства принтера из проводника Windiws, но не из Excel. Нашел только следующее решение:
- Делаем нужный принтер не активным (выбираем любой другой).
- Переключаем дуплекс нужному принтеру
- Выбираем его активным.
Тогда настройки будут прочитаны. Способ тоже не очень, и похоже нужна задержка после переключения, но он пока единственный.
Я прикладываю примеры в файле, чтобы не раздувать тему тут.
В примере есть еще разные модуля, думаю они будут интересны тем, кто изучает тему печати.
Хотелось бы обсудить модуль PrinterDuplexVBA Function TestPrinter()
Неплохо бы было изменять не общие настройки драйвера а только настройки активного принтера Excel, чтобы это не касалось других программ.

Автор - Bagir
Дата добавления - 12.10.2010 в 12:18
Bagir Дата: Вторник, 12.10.2010, 15:30 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Добавил нововведение в программу. Все получилось. Дуплекс нормально работает. Были редкие несрабатывания, но задержка в одну секунду даже простым способом Application.Wait исправила положение.
Осталось решить две проблемы, которые тесно связанны. Предложенные способы меняют параметры драйвера принтера по умолчанию, а не временные параметры печати активного принтера, пока "живет" программа. В виду этого чтобы их считать, нужно перед изменением параметров сделать принтер неактивным (выбрать любой другой), а потом выбрать нужный.
Отличнейшим решением было бы изменение не параметров по умолчанию а сразу временных параметров, которые помнит Excel. Господа, код в примере открыт. Но тут нужны спецы по части API.
Смотрите в моем файле модуль PrinterDuplexVBA. Там две функции. Это все что надо для работы.
Функция TestPrinter запускает функцию SetPrinterDuplex.
 
Ответить
СообщениеДобавил нововведение в программу. Все получилось. Дуплекс нормально работает. Были редкие несрабатывания, но задержка в одну секунду даже простым способом Application.Wait исправила положение.
Осталось решить две проблемы, которые тесно связанны. Предложенные способы меняют параметры драйвера принтера по умолчанию, а не временные параметры печати активного принтера, пока "живет" программа. В виду этого чтобы их считать, нужно перед изменением параметров сделать принтер неактивным (выбрать любой другой), а потом выбрать нужный.
Отличнейшим решением было бы изменение не параметров по умолчанию а сразу временных параметров, которые помнит Excel. Господа, код в примере открыт. Но тут нужны спецы по части API.
Смотрите в моем файле модуль PrinterDuplexVBA. Там две функции. Это все что надо для работы.
Функция TestPrinter запускает функцию SetPrinterDuplex.

Автор - Bagir
Дата добавления - 12.10.2010 в 15:30
Bagir Дата: Пятница, 05.10.2012, 00:00 | Сообщение № 3
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Обсуждение пошло тут
http://www.planetaexcel.ru/forum.p....t368211
 
Ответить
СообщениеОбсуждение пошло тут
http://www.planetaexcel.ru/forum.p....t368211

Автор - Bagir
Дата добавления - 05.10.2012 в 00:00
Полковник МВД Дата: Пятница, 05.10.2012, 00:05 | Сообщение № 4
Группа: Гости
А поиском по "Двухсторонняя печать"?
http://www.excelworld.ru/forum/2-2191-1#24083
 
Ответить
СообщениеА поиском по "Двухсторонняя печать"?
http://www.excelworld.ru/forum/2-2191-1#24083

Автор - Полковник МВД
Дата добавления - 05.10.2012 в 00:05
Bagir Дата: Пятница, 05.10.2012, 00:37 | Сообщение № 5
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

А вы на дату публикации этой ветки посмотрите пожалуйста... Просто тут тема сразу замерла без обсуждения, но закрыта не была.
Ну раз там тему подняли, то может быть там ее и продолжу. За наводку спасибо, почитаю сейчас.
 
Ответить
СообщениеА вы на дату публикации этой ветки посмотрите пожалуйста... Просто тут тема сразу замерла без обсуждения, но закрыта не была.
Ну раз там тему подняли, то может быть там ее и продолжу. За наводку спасибо, почитаю сейчас.

Автор - Bagir
Дата добавления - 05.10.2012 в 00:37
Bagir Дата: Пятница, 05.10.2012, 00:49 | Сообщение № 6
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Продублирую тут тему с excelworld.ru

Следует знать:
Excel не умеет работать с двухсторонней печатью и вообще не знает что это такое.
Все что связано с дуплексом находится в драйвере принтера.

Замеченно:
При выборе принтера, Excel получает его настройки, в том числе и настройки дуплекса.
Excel помнит их "пока живет" или до выбора другого принтера.
Изменение настроек в Экселе Файл -> Печать -> Свойства вызывает окно драйвера принтера,
Но не изменяет общих настроек этого принтера.

То есть изменения настроек принтера сделанные в Эксел не увидеть например в Ворде.

Если нужный принтер в Excel уже выбран, то изменение его настроек
по средствам Панель управления - > Принтеры -> Свойства ничего не дадут.

Главный недостаток предложенного кода:
Изменения дуплекса будут сделаны в общих настройках драйвера принтера,
а не в тех, что уже запомнил Excel

вариант обхода:
После изменения настроек, выбрать любой другой принтер, а затем обратно выбрать нужный,
чтобы его измененные настройки были заного прочитаны Excel-ом.
Но такой вариант работает нестабильно, да и он просто вообще "кривой" и не является решением.

Нужно:
Заставить функцию изменять настройки принтера, уже считанные Excel-ом

Еще раз хочу отметить:
Свойства принтера открытые из окна печати Excel и из Палень управления -> Принтеры Не одно и тоже!
К сообщению приложен файл: PrinterDuplexSa.xls (84.5 Kb)
 
Ответить
СообщениеПродублирую тут тему с excelworld.ru

Следует знать:
Excel не умеет работать с двухсторонней печатью и вообще не знает что это такое.
Все что связано с дуплексом находится в драйвере принтера.

Замеченно:
При выборе принтера, Excel получает его настройки, в том числе и настройки дуплекса.
Excel помнит их "пока живет" или до выбора другого принтера.
Изменение настроек в Экселе Файл -> Печать -> Свойства вызывает окно драйвера принтера,
Но не изменяет общих настроек этого принтера.

То есть изменения настроек принтера сделанные в Эксел не увидеть например в Ворде.

Если нужный принтер в Excel уже выбран, то изменение его настроек
по средствам Панель управления - > Принтеры -> Свойства ничего не дадут.

Главный недостаток предложенного кода:
Изменения дуплекса будут сделаны в общих настройках драйвера принтера,
а не в тех, что уже запомнил Excel

вариант обхода:
После изменения настроек, выбрать любой другой принтер, а затем обратно выбрать нужный,
чтобы его измененные настройки были заного прочитаны Excel-ом.
Но такой вариант работает нестабильно, да и он просто вообще "кривой" и не является решением.

Нужно:
Заставить функцию изменять настройки принтера, уже считанные Excel-ом

Еще раз хочу отметить:
Свойства принтера открытые из окна печати Excel и из Палень управления -> Принтеры Не одно и тоже!

Автор - Bagir
Дата добавления - 05.10.2012 в 00:49
KuklP Дата: Пятница, 05.10.2012, 11:08 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Quote (Bagir)
Нужно: Заставить функцию изменять настройки принтера, уже считанные Excel-ом
Эксу вообще пофиг, какие там у принтера настройки. Он отправляет задание в диспетчер печати. См. Сообщение № 10 в теме:
http://www.excelworld.ru/forum/2-2191-1
А с драйвером принтера работает тот же диспетчер. Эксел не знает, какой там драйвер и какого принтера. Через АПИ можно добраться к драйверу, но Экс опять же, будет тут ни при чем.
ЗЫ "по средствам" в Вашем контексте правильно писать - "посредством".


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Quote (Bagir)
Нужно: Заставить функцию изменять настройки принтера, уже считанные Excel-ом
Эксу вообще пофиг, какие там у принтера настройки. Он отправляет задание в диспетчер печати. См. Сообщение № 10 в теме:
http://www.excelworld.ru/forum/2-2191-1
А с драйвером принтера работает тот же диспетчер. Эксел не знает, какой там драйвер и какого принтера. Через АПИ можно добраться к драйверу, но Экс опять же, будет тут ни при чем.
ЗЫ "по средствам" в Вашем контексте правильно писать - "посредством".

Автор - KuklP
Дата добавления - 05.10.2012 в 11:08
Bagir Дата: Пятница, 05.10.2012, 11:16 | Сообщение № 8
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Стоп, тут немного не так. Эксу вовсе не пофиг. При открытии Екса или при смене в Эксе текущего принтера, запоминаются настройки этого принтера на время жизни Экса или до выбора другого принтера. Приведенный мною пример хорошо меняет настройки у принтера, но не те, которые уже помнит Екс, и с которыми задание и будет отправлено на печать.
 
Ответить
СообщениеСтоп, тут немного не так. Эксу вовсе не пофиг. При открытии Екса или при смене в Эксе текущего принтера, запоминаются настройки этого принтера на время жизни Экса или до выбора другого принтера. Приведенный мною пример хорошо меняет настройки у принтера, но не те, которые уже помнит Екс, и с которыми задание и будет отправлено на печать.

Автор - Bagir
Дата добавления - 05.10.2012 в 11:16
Bagir Дата: Пятница, 05.10.2012, 11:19 | Сообщение № 9
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Другими словами мы может открыть Екс и Водр например. Выбрать в обоих один и тот же принтер, в одном указать двухстороннюю печать, а в другом одностороннюю.
А мой пример изменит именно параметры принтера, которые можно посмотреть Палень управления -> Принтеры.

Так где же находятся параметры принтера, которые уже прочитал и запомнил Екс?
 
Ответить
СообщениеДругими словами мы может открыть Екс и Водр например. Выбрать в обоих один и тот же принтер, в одном указать двухстороннюю печать, а в другом одностороннюю.
А мой пример изменит именно параметры принтера, которые можно посмотреть Палень управления -> Принтеры.

Так где же находятся параметры принтера, которые уже прочитал и запомнил Екс?

Автор - Bagir
Дата добавления - 05.10.2012 в 11:19
KuklP Дата: Пятница, 05.10.2012, 11:37 | Сообщение № 10
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Еще раз - никто ничего не читал и не запоминал. Вызывая Параметры печати, мы вызываем одно из окон Диспетчера печати и он уже передает драйверу выбранные параметры. И он помнит, откуда какое задание получил. Мясорубка не в курсе, что приготовят из фарша - тефтели, фрикадельки или котлеты:-) Просто выдает фарш.
Это мое мнение. Сумеете опровергнуть, буду только рад.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеЕще раз - никто ничего не читал и не запоминал. Вызывая Параметры печати, мы вызываем одно из окон Диспетчера печати и он уже передает драйверу выбранные параметры. И он помнит, откуда какое задание получил. Мясорубка не в курсе, что приготовят из фарша - тефтели, фрикадельки или котлеты:-) Просто выдает фарш.
Это мое мнение. Сумеете опровергнуть, буду только рад.

Автор - KuklP
Дата добавления - 05.10.2012 в 11:37
Bagir Дата: Пятница, 05.10.2012, 11:46 | Сообщение № 11
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Это все понятно и верно, про мясорубку ))
Делаем так:
Лезем в Палень управления -> Принтеры. Выбираем принтер и настраиваем его на одностороннюю печать.
Открываем Екс. Жмем Файл -> Печать, выбираем наш принтер и смотрит параметры. Там выбрана односторонняя печать. Меняем ее на двухстороннюю. Печатаем документ.
Открываем Палень управления -> Принтеры. Смотрим там. Там как была выставленна односторонняя печать, так и останется.
Открываем в Ексе Файл -> Печать. Смотрим. Там висит у этого принтера двухсторонняя.
Это как объяснить?

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

Мой пример может изменить параметры у принтера, которые всегда можно увидеть в Палень управления -> Принтеры
А для успеха нужно изменять параметры которые существуют, пока открыт Екс.
 
Ответить
СообщениеЭто все понятно и верно, про мясорубку ))
Делаем так:
Лезем в Палень управления -> Принтеры. Выбираем принтер и настраиваем его на одностороннюю печать.
Открываем Екс. Жмем Файл -> Печать, выбираем наш принтер и смотрит параметры. Там выбрана односторонняя печать. Меняем ее на двухстороннюю. Печатаем документ.
Открываем Палень управления -> Принтеры. Смотрим там. Там как была выставленна односторонняя печать, так и останется.
Открываем в Ексе Файл -> Печать. Смотрим. Там висит у этого принтера двухсторонняя.
Это как объяснить?

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

Мой пример может изменить параметры у принтера, которые всегда можно увидеть в Палень управления -> Принтеры
А для успеха нужно изменять параметры которые существуют, пока открыт Екс.

Автор - Bagir
Дата добавления - 05.10.2012 в 11:46
Bagir Дата: Пятница, 05.10.2012, 11:51 | Сообщение № 12
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Либо надо каким то образом заставить Экс обновить параметры принтера. Сделать это у меня получилось пока только так. Выбираем в Эксе любой другой принтер и затем опять выбираем нужный, параметры которого мы изменили.

Если уйти от моего примера и VBA вообще, объясню так:

Открывает Экс. Выбираем наш принтер. Файл -> Печать и с его свойствах выбираем одностороннюю печать.
Лезем в Палень управления -> Принтеры. Выбираем наш принтер и в его свойствах переключаем печать на двухстороннюю.
Возвращаемся в Экс, Файл -> Печать и смотрим там. Ну нет там двухсторонней печати.
Но если мы переключим принтер на другой, затем обратно, двухсторонняя печать появится. Потому что при выборе принтера читаются его настройки, которые мы изменили в Палень управления -> Принтеры
 
Ответить
СообщениеЛибо надо каким то образом заставить Экс обновить параметры принтера. Сделать это у меня получилось пока только так. Выбираем в Эксе любой другой принтер и затем опять выбираем нужный, параметры которого мы изменили.

Если уйти от моего примера и VBA вообще, объясню так:

Открывает Экс. Выбираем наш принтер. Файл -> Печать и с его свойствах выбираем одностороннюю печать.
Лезем в Палень управления -> Принтеры. Выбираем наш принтер и в его свойствах переключаем печать на двухстороннюю.
Возвращаемся в Экс, Файл -> Печать и смотрим там. Ну нет там двухсторонней печати.
Но если мы переключим принтер на другой, затем обратно, двухсторонняя печать появится. Потому что при выборе принтера читаются его настройки, которые мы изменили в Палень управления -> Принтеры

Автор - Bagir
Дата добавления - 05.10.2012 в 11:51
Bagir Дата: Пятница, 05.10.2012, 14:42 | Сообщение № 13
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Обновил пример. Все комментарии в модуле PrinterDuplex. Пробуем, пишем любые идеи.
К сообщению приложен файл: PrinterDuplexSa.xls (72.5 Kb)
 
Ответить
СообщениеОбновил пример. Все комментарии в модуле PrinterDuplex. Пробуем, пишем любые идеи.

Автор - Bagir
Дата добавления - 05.10.2012 в 14:42
Bagir Дата: Среда, 10.10.2012, 00:08 | Сообщение № 14
Группа: Проверенные
Ранг: Участник
Сообщений: 59
Репутация: 15 ±
Замечаний: 0% ±

Продолжение обсуждения в http://www.excelworld.ru/forum/2-2535-1
А эту ветку я попросил бы закрыть.
 
Ответить
СообщениеПродолжение обсуждения в http://www.excelworld.ru/forum/2-2535-1
А эту ветку я попросил бы закрыть.

Автор - Bagir
Дата добавления - 10.10.2012 в 00:08
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!