Страницы: 1
RSS
Excel. Настройки принтера. Двухсторонняя печать
 
Задача: Изменение настроек выбранного принтера Excel из VBA.  
 
Определимся с условными названиями:  
Принтер Windows  -  Принтера из Пуск -> Панель управления -> Принтеры  
Примнет Excel  -  Excel -> Файл -> Печать  
И там и там можно открыть свойства принтера. Но это не одно и тоже. Когда Excel открывается, он читает настройки принтера, выбранного по умолчанию в Windows, далее по тексту просто принтер Windows. Можно изменять свойства принтера Windows и его свойства будут прочитаны Excel-ом при открытии или выборе этого принтера в Excel. Если принтер в Excel уже выбран, то изменять свойства принтера Windows уже бес толку, так как Excel их уже получил, запомнил, и больше смотреть туда не будет до выбора другого принтера.  
 
Двухсторонняя печать и другие свойства принтера:  
Первое что надо вкурить - в Excel и вообще в Оффисе нет, не было и наверное не будет двухсторонней печати. Точно также как подобного свойства нет и в других программах, например в 1С или в простом блокноте. Да проще сказать где оно есть. Есть оно например в программе FinePrint. Кто юзал, тот поймет. А в других программах мы просто вызываем свойства принтера и выбираем там режим двухсторонней печати. То есть все это обрабатывает драйвер принтера, а не Excel. Excel просто отправляет документ на печать с настройками, которые уже получил и помнит.  
 
Что делать если ну очень хочется?  
Изменить свойства принтера по средствам вызова API функций из VBA, а затем отправить документ на печать. Тут стоит сразу отметить, что Excel и Word ведут себя по разному, но сейчас не об этом.  
 
Для окончательного усвоения материала, проделаем следующее:  
Забудем на время про VBA, API и вообще все что связано с программированием. Открываем принтер Windows (см. формулировку в начале статьи). Ставим там у принтера по умолчанию например свойство двухсторонней печати (далее по тексту Duplex). Открываем Excel. Смотрим свойства принтера Excel (Excel -> Файл -> Печать -> Свойства). Видим там что Duplex выставлен. Закрываем свойства принтера Excel, но не сам Excel. Открываем свойства принтера Windows и убираем Duplex. Опять открываем совйства принтера Excel, смотрим, а дуплекс то там остался, хоть мы и убрали его в принтере Windows.  
Что же это означает? А то, что после того, как Excel получил свойства принтера Windows, изменять их уже бес толку, потому что Excel помнит свою копию свойств.  
А теперь проделаем все наоборот. Изменим свойства принтера Excel и посмотрим отразились ли они на свойствах принтера Windows. А и не отобразились, но Excel продолжает их помнить. Ну а это означает, что изменение свойств принтера Excel никак не повлияет на свойства принтера Winows, и другие программы не увидят этих изменений, что мы сделали в Excel.  
 
Теперь подумаем что и когда надо менять:    
Правильнее будет предоставить изменять свойства принтера Windows только пользователю. Пусть он сам установит те первоначальные свойства принтеров, с какими он бы хотел видеть их в других программах. А вод свойства принтера Excel можно "гнуть" как угодно под каждую конкретную задачу.  
 
Ну а теперь грустный финал этой статьи. Увы это не урок, а простой вопрос. Есть пример VBA который легко, быстро, и надежно (ну у меня по крайней мере) меняет свойства принтера Windows. А нужно изменять свойства принтера Excel.  
 
Как нелепое решение могу предложить следующее:    
Меняем принтер Excel на какой нибудь другой. Изменяем свойства принтера Windows. Выбираем в Excel этот принтер. В момент выбора будут опять прочитаны его уже измененные свойства.  
Недостатки этого способа:  
1. Танцы со сменой принтеров требуют задержки и нагружают код нашей программы.  
2. Изменения сделанные кодом нашей программы влияют на все другие программы, т.к. мы изменяем общие свойства принтера. Можно конечно по завершению вернуть все обратно, но можно и забыть, или например прога завершиться не корректно, и возврат сделан не будет.  
 
В примере сразу смотрим модуль PrinterDuplex. Там внизу две процедуры теста. Получение и установка дуплекса.  
 
Что нужно:  
Добиться чтобы пример изменял не свойства принтера Windows, а свойства принтера Excel.  
 
Давайте сделаем это. Любые идеи, будем пробовать. Очень бы помогла консультация специалиста на тему печати в целом. Где и как хранятся свойства принтера на время жизни программы, которая отправляет документы на печать. Вот например тот же Блокнот тоже позволит открыть свойства принтера. Но там не будет кнопки "Применить". И все изменения будут сразу же забыты при закрытии диалога печати.
Страницы: 1
Наверх