Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2012, 00:47   #1
Bagir
Пользователь
 
Регистрация: 10.10.2012
Сообщений: 19
По умолчанию 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.

Давайте сделаем это. Любые идеи, будем пробовать. Очень бы помогла консультация специалиста на тему печати в целом. Где и как хранятся свойства принтера на время жизни программы, которая отправляет документы на печать. Вот например тот же Блокнот тоже позволит открыть свойства принтера. Но там не будет кнопки "Применить". И все изменения будут сразу же забыты при закрытии диалога печати.
Вложения
Тип файла: zip PrinterAPI.zip (68.1 Кб, 86 просмотров)
Bagir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Fastreport двухсторонняя печать А5 на формате А4 overlookerz БД в Delphi 0 16.04.2011 01:10
Настройки Excel 2003/2007 в реестре MaZai Microsoft Office Excel 0 23.12.2010 22:45
PDF двухсторонняя печать VladimirVB Microsoft Office Word 3 23.11.2010 12:23
печать в excel HANK Microsoft Office Excel 1 04.08.2007 07:48
Процедура печать и настройки печати _Solomon_ Помощь студентам 2 21.05.2007 09:31