<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=4049&amp;type=atom" />
	<updated>2010-10-11T18:25:37Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=4049</id>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=40319#p40319" />
			<content type="html"><![CDATA[<p><span style="color: Green"><strong>Bagir</strong>, прочтите справку по <a href="http://forum.script-coding.com/help.php#bbcode">BBCode</a> и используйте теги. Я поправил Ваши посты.</span></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-10-11T18:25:37Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=40319#p40319</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=40315#p40315" />
			<content type="html"><![CDATA[<p>В общем задача решена с горем пополам, а я уж было и не верил в боле менее приемлемый вариант. Менять настройки у принтера, выбранного для печати т.е. Application.ActivePrinter бес толку. Excel все равно помнит свои параметры принтера. Вывод: Выбираем другой принтер, меняем у нужного, и выбираем его. Тогда настройки будут такими, какие в этот момент в памяти драйвера.<br />На данный момент есть два примера. Один очень короткий с использованием сторонней dll, другой увесистый, но полностью на VB. Оба примера не оставляют паразитных черных окон и прочей чешуи. Но минус у них общий. При работе VBA изменяются параметры драйвера принтера, т.е. переключение дуплекса идет в нем. Если в этот момент работают другие проги, и для них это критично, то вероятно это решение не подойдет. Но немного разгоню тучи. Можно сделать таким образом, чтобы первоначальное состояние настройки возвращалось после печати.</p>]]></content>
			<author>
				<name><![CDATA[Bagir]]></name>
			</author>
			<updated>2010-10-11T15:55:51Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=40315#p40315</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=40302#p40302" />
			<content type="html"><![CDATA[<p>не все так просто, но ексель это может, нужно узнать ДиСи окна и дальше пойдет</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2010-10-11T13:22:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=40302#p40302</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=40290#p40290" />
			<content type="html"><![CDATA[<p>Вот еще вариант переключения дуплекса с использованием DLL: <a href="http://www.vbforums.com/showthread.php?t=564553">VBA, office, VBS or shell duplex printing - VBForums</a>.</p><p>Но та же проблема: Переключение можно увидеть в свойствах принтера через Пуск-&gt;Принтеры и факсы, но в свойствах принтера, вызванных через диалог печати Excel, эти переключения не видны.</p>]]></content>
			<author>
				<name><![CDATA[Bagir]]></name>
			</author>
			<updated>2010-10-11T11:18:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=40290#p40290</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=40287#p40287" />
			<content type="html"><![CDATA[<p>Тоже давно ищу способ. Нашел замечательный такой пример: <a href="http://www.mrexcel.com/forum/showthread.php?t=59285">Duplex Printing - MrExcel Message Board</a>. Отлично работает. Красиво оформлен и даже обработка ошибок. Похоже умелые руки его делали <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />строку:<br /></p><div class="codebox"><pre><code>strvbPrinter = Left$(strPrinter, 24)</code></pre></div><p>заменить на:<br /></p><div class="codebox"><pre><code>strvbPrinter = Left(strPrinter, InStrRev(strPrinter, &quot; &quot;) - 1)</code></pre></div><p>чтобы нормально отрезать хвостик от имени принтера, полученного с помощью Application.ActivePrinter.</p><p>Но фишка в следующем: Переключает дуплекс то он отлично, но Excel зараза помнит с какими настройками при открытии он этот принтер взял. То же самое наблюдается и в уже предоставленных тут примерах. То есть чтобы понять, можно отбросить макросы в сторону.<br />Открываем Excel<br />делаем файл -&gt; Печать<br />Смотрим настройки принтера<br />Смотрим как выставлен дуплекс<br />Далее ничего не изменяя закрываем настройки.<br />Давим кнопку &quot;Пуск&quot; -&gt; Принтеры и факсы<br />Открываем свойства принтера и меняем дуплекс.<br />Закрываем с сохранением. (именно это и делают все найденные мною примеры включая этот)<br />Открываем диалог печати в Excel и смотрим свойства принтера - Дуплекс.</p><p>Нашего переключения, которое было сделано через &quot;Принтеры и факсы&quot; мы не видим. То есть Excel запомнил состояние принтера при старте.<br />Как бы научить его считать настройки принтеров заново, тогда бы модуль был на все 100% рабочий, и управлять дуплексом из VBA было бы реально.</p>]]></content>
			<author>
				<name><![CDATA[Bagir]]></name>
			</author>
			<updated>2010-10-11T10:44:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=40287#p40287</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=38564#p38564" />
			<content type="html"><![CDATA[<p>Всем доброго времени суток!<br />Уже месяц бьюсь пальцами об &quot;клаву&quot; по этой же теме, и ничего не придумал лучше ниже следующего:</p><p>Перед тем как выводить на печать в дуплексе из Екселя, необходимо создать два файла на диске &quot;C:\&quot;, которые будут содержать все настройки принтера.<br />Первый будет содержать настройки принтера по умолчанию, а второй настройки для печати в дуплексе.<br />Первый файл &quot;Default.dat&quot; можно создать сразу нижеследующей строкой из любого командера или в CMD.EXE, если принять<br />во внимание что принтер и так настроен по умолчанию: &quot;C:\Windows\System32\printui.exe /Ss /n &quot;Имя принтера&quot; /a &quot;C:\Default.dat&quot;.<br />Имя принтера - принтер по умолчанию, например: HP LaserJet 2200 Series PCL 5.<br />Перед созданием второго - &quot;Duplex.dat&quot;, сначала необходимо зайти в настройки принтера и включить дуплекс в двух закладках - &quot;Общие&quot; -&gt; &quot;Настройка...&quot; и<br />&quot;Дополнительно&quot; -&gt; &quot;умолчания...&quot;.<br />Обе панели должны быть настроены одинаково, только в этом случае обеспечивается надежная печать в дуплексе.<br />Затем нижеследующей строкой в CMD.EXE сохраняется второй файл настроек принтера:<br />&quot;C:\Windows\System32\printui.exe /Ss /n &quot;Имя принтера&quot; /a &quot;C:\Duplex.dat&quot;.<br />Теперь можно написать макрос который будет вызывать программу, с помощью которой будут меняться настройки принтера на дуплекс, затем печать и возврат принтера<br />в исходное состояние.</p><div class="codebox"><pre><code>Sub DuplexPrint()

Dim PrnName As String
   &#039; Чтобы не думать в дальнейшем какой принтер используется по умолчанию,
   &#039; получаем его имя в PrnName.
PrnName = Application.ActivePrinter
   &#039; Получается, к примеру, принтер по умолчанию: &quot;HP LaserJet 2200 Series PCL 5 (LPT1:)&quot;.
   &#039; В названии принтера присутствуют лишние данные: &quot; (LPT1:)&quot;, следующим действием вычисляем позицию последнего пробела и
   &#039; убираем паразитные &quot; (LPT1:)&quot; из названия принтера.
PrnName = Left(PrnName, InStrRev(PrnName, &quot; &quot;) - 1)
   &#039; Теперь запускаем исполняемую программу Windows rundll32 c библиотекой printui и заранее подготовленными
   &#039; параметрами принтера в файле &quot;Duplex.dat&quot; для печати в дуплексе.
Shell &quot;rundll32 printui.dll,PrintUIEntry /Sr /n &quot; &amp; Chr(34) &amp; PrnName &amp; Chr(34) &amp; &quot; /a &quot; &amp; Chr(34) &amp; &quot;C:\Duplex.dat&quot; &amp; Chr(34), vbNormalFocus
   &#039; Здесь как раз и пригодилось имя принтера по умолчанию т.к. данная прога автоматом его не определяет.
   &#039; Полный список команд этой проги можно посмотреть запустив &quot;C:\Windows\System32\printui.exe&quot;.   
   &#039; Чтобы настройки успели записаться в дрова принтера нужно сделать небольшую паузу перед дальнейшей
   &#039; печатью. Как правило 1 сек. достаточно.
Application.Wait (Now + TimeValue(&quot;0:00:01&quot;))
   &#039; Далее идет печать листов с использованием дуплекса.
ActiveWorkbook.Sheets(Array(&quot;Лист1&quot;, _
&quot;Лист2&quot;)).PrintOut copies:=1
   &#039; И наконец возвращаем первоначальные настройки принтера заранее подготовленым файлом &quot;Default.dat&quot;.
Shell &quot;rundll32 printui.dll,PrintUIEntry /Sr /n &quot; &amp; Chr(34) &amp; PrnName &amp; Chr(34) &amp; &quot; /a &quot; &amp; Chr(34) &amp; &quot;C:\Default.dat&quot; &amp; Chr(34), vbNormalFocus

&#039; Кому нравится чтобы во время печати мелькали черные окна командной строки, может после функции Shell вместо
&#039; &quot;rundll32 printui.dll,PrintUIEntry ***&quot;
&#039; написать следующее:
&#039; &quot;CMD /c C:\Windows\System32\printui.exe ***&quot;

End Sub</code></pre></div><p>Выше приведенный макросовый изврат является дороботкой макроса написаного &quot;Kuryachev&quot;-ым (да, простит меня автор).<br />Отличие заключается в отсутствии необходимости писать в макросе конкретный принтер и подгонять параметры включения принтера в дуплекс<br />методом тыка, что для многих может стать &quot;камнем предкновения&quot;.<br />Также можно подготовить файлы настроек принтера для любых других случаев печати из Екселя, например: режим брошюры.<br />Тем не мение, данный способ остается извратом, так как:<br /> - меняет настройки самого драйвера принтера, а не Екселя<br /> - необходимо держать на диске файлы настроек принтера<br /> - для работоспособности макроса необходимо предварительно создать эти файлы настроек<br /> - нельзя перенести макрос на другой комп и сразу работать (например: отправить по почте готовую таблицу пользователю<br />&nbsp; &nbsp;не объяснив как создать и куда положить файлы настроек)<br /> - нельзя определить поддерживает ли вообще принтер дуплекс.</p><p>А, мелкософту за это ОГРОМНЫЙ -М-И-Н-У-С-. <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Medeg1971]]></name>
			</author>
			<updated>2010-08-16T04:39:19Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=38564#p38564</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=36427#p36427" />
			<content type="html"><![CDATA[<p>Я разработал код, но сразу хочу сказать что он кривоват, поскольку для Экселя ничего в VBA под дуплекс не разработано(не могу сказать за Офис 2010 есть ли там какие-то добавления). А по сему как-то вот так:<br /></p><div class="codebox"><pre><code>Sub Duplex() &#039;установка двухсторонней печати
 Dim prntr As String
 prntr = &quot;rundll32 printui.dll,PrintUIEntry /e /n &quot; &amp; Chr(34) &amp; Printer &amp; Chr(34) &#039;справка в C:\Windows\System32\printui.exe
    Shell prntr, vbNormalFocus &#039;
    Application.Wait (Now + TimeValue(&quot;0:00:02&quot;))
    Application.SendKeys &quot;+{TAB}{RIGHT}{RIGHT}%y&quot;, True &#039;данную строку необходимо подгонять под конкретный принтер методом тыка
End Sub</code></pre></div><p>Для меня также важен код для определения поддержки (или нет) дуплекса используемым принтером.<br />Заранее благодарен.</p>]]></content>
			<author>
				<name><![CDATA[Kuryachev]]></name>
			</author>
			<updated>2010-06-08T09:38:30Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=36427#p36427</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=36183#p36183" />
			<content type="html"><![CDATA[<p>Эта же проблема возникла давее как вчера<br />имеем книгу со 125 листами на каждом по 4 печатных страницы - как включить для каждого двухстороннюю печать ?<br />или усложним - как при ранее настроенных в ручнуюю свойствах в параметрах страницы изменить часть листов на двухстороннюю печать, часть на одностороннюю ?</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2010-05-28T04:55:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=36183#p36183</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=32071#p32071" />
			<content type="html"><![CDATA[<p>Конечно. Осталось выяснить, это ли самое имел в виду автор темы, або что иное <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-01-08T07:01:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=32071#p32071</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=32070#p32070" />
			<content type="html"><![CDATA[<p>Насколько я знаю, если на принтере сконфигурировать опцию duplex=on, то он все задания по-умолчанию будет печатать в дуплексе. Может лучше ориентироваться на этот вариант?</p>]]></content>
			<author>
				<name><![CDATA[dsb]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24622</uri>
			</author>
			<updated>2010-01-08T05:32:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=32070#p32070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=32063#p32063" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>max7 пишет:</cite><blockquote><p>Я предпочитаю управлять двусторонней печатью &quot;в ручную&quot;: печатаю нечётные, затем выдаю диалог вроде &quot;переверните/продолжать/отмена&quot;, печатаю чётные, и т.п.</p></blockquote></div><p>Оно именно так и есть.</p><p>Я тоже как-то делал для себя под Access&#039;ом, только чуть иначе: из отчёта формата A5 делал брошюру на листах A4, дабы можно было потом просто сложить пополам и скрепить. Так сказать четырёхсторонняя печать <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /> — нужно было <em>трижды</em> поворачивать листы. Было весьма весело, но всё-таки сделал и потом печатал.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-01-07T17:25:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=32063#p32063</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=32062#p32062" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Печатается одна сторона листов (нечётная), затем он просит вынуть/повернуть/вставить листы, затем печатается вторая сторона листов (чётная).</p></blockquote></div><p>Ну это не дуплекс, это насмешка какая-то. Я предпочитаю управлять двусторонней печатью &quot;в ручную&quot;: печатаю нечётные, затем выдаю диалог вроде &quot;переверните/продолжать/отмена&quot;, печатаю чётные, и т.п.</p><p>P.S.: Самое интересное (я немного изучал это вопрос), что при &quot;прямой печати&quot; на принтер/спуллер (форматы к PCL, PostScript, и т.д. смотря какой поддерживает принтер, либо эмулятор в драйвере) в &quot;текущем сеансе печати&quot; задавать режимы печати очень просто (в winapi есть специальные методы ). Для PCL это по сути однобайтовая команда, для PS - вызов процедуры.</p>]]></content>
			<author>
				<name><![CDATA[max7]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=10498</uri>
			</author>
			<updated>2010-01-07T16:31:00Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=32062#p32062</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=32061#p32061" />
			<content type="html"><![CDATA[<p>OFF: <strong>max7</strong>, как раз для WinWord&#039;а данный флажок обрабатывается им самим безо всякого участия драйвера принтера (что, конечно, не отменяет возможность задействовать не его, а возможность двусторонней печати через сам драйвер принтера, если тот поддерживает такую возможность). В данном случае, для WinWord&#039;а это:<br /></p><div class="codebox"><pre><code>Application.PrintOut ManualDuplexPrint:=True</code></pre></div><p>Печатается одна сторона листов (нечётная), затем он просит вынуть/повернуть/вставить листы, затем печатается вторая сторона листов (чётная).</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-01-07T14:40:10Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=32061#p32061</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=32056#p32056" />
			<content type="html"><![CDATA[<p>Настройки драйвера/принтера специфичны для конкретного драйвера/принтера, но есть возможность включить (в частности) дуплекс через winapi через структуры свойств драйвера/принтера. Я могу ошибаться, но если принтер поддерживает дуплекс, и он включён в настройках драйвера, то в диалоге печати появляется чекбокс &quot;двухсторонняя печать&quot;, и по-моему, это &quot;фича&quot; не доступна из VBA.</p>]]></content>
			<author>
				<name><![CDATA[max7]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=10498</uri>
			</author>
			<updated>2010-01-07T09:16:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=32056#p32056</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=32054#p32054" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>max7 пишет:</cite><blockquote><p>Нет,&nbsp; дуплекс можно указать в настройках принтера (не&nbsp; в excel&#039;е)&nbsp; <a href="http://office.microsoft.com/en-us/word/hp011543871033.aspx">http://office.microsoft.com/en-us/word/ … 71033.aspx</a></p></blockquote></div><p>Коллега, как раз этот, приведённый Вами, пример относится именно к возможностям самого приложения (WinWord), а не к настройкам драйвера принтера <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />. А за ссылки — спасибо.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-01-07T04:13:56Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=32054#p32054</id>
		</entry>
</feed>
