<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=4049</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=4049&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Excel/VBA: Установка двухсторонней печати (Duplex print)».]]></description>
		<lastBuildDate>Mon, 11 Oct 2010 18:25:37 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40319#p40319</link>
			<description><![CDATA[<p><span style="color: Green"><strong>Bagir</strong>, прочтите справку по <a href="http://forum.script-coding.com/help.php#bbcode">BBCode</a> и используйте теги. Я поправил Ваши посты.</span></p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 11 Oct 2010 18:25:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40319#p40319</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40315#p40315</link>
			<description><![CDATA[<p>В общем задача решена с горем пополам, а я уж было и не верил в боле менее приемлемый вариант. Менять настройки у принтера, выбранного для печати т.е. Application.ActivePrinter бес толку. Excel все равно помнит свои параметры принтера. Вывод: Выбираем другой принтер, меняем у нужного, и выбираем его. Тогда настройки будут такими, какие в этот момент в памяти драйвера.<br />На данный момент есть два примера. Один очень короткий с использованием сторонней dll, другой увесистый, но полностью на VB. Оба примера не оставляют паразитных черных окон и прочей чешуи. Но минус у них общий. При работе VBA изменяются параметры драйвера принтера, т.е. переключение дуплекса идет в нем. Если в этот момент работают другие проги, и для них это критично, то вероятно это решение не подойдет. Но немного разгоню тучи. Можно сделать таким образом, чтобы первоначальное состояние настройки возвращалось после печати.</p>]]></description>
			<author><![CDATA[null@example.com (Bagir)]]></author>
			<pubDate>Mon, 11 Oct 2010 15:55:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40315#p40315</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40302#p40302</link>
			<description><![CDATA[<p>не все так просто, но ексель это может, нужно узнать ДиСи окна и дальше пойдет</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Mon, 11 Oct 2010 13:22:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40302#p40302</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40290#p40290</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Bagir)]]></author>
			<pubDate>Mon, 11 Oct 2010 11:18:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40290#p40290</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40287#p40287</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Bagir)]]></author>
			<pubDate>Mon, 11 Oct 2010 10:44:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40287#p40287</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=38564#p38564</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Medeg1971)]]></author>
			<pubDate>Mon, 16 Aug 2010 04:39:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=38564#p38564</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=36427#p36427</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Kuryachev)]]></author>
			<pubDate>Tue, 08 Jun 2010 09:38:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=36427#p36427</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=36183#p36183</link>
			<description><![CDATA[<p>Эта же проблема возникла давее как вчера<br />имеем книгу со 125 листами на каждом по 4 печатных страницы - как включить для каждого двухстороннюю печать ?<br />или усложним - как при ранее настроенных в ручнуюю свойствах в параметрах страницы изменить часть листов на двухстороннюю печать, часть на одностороннюю ?</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Fri, 28 May 2010 04:55:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=36183#p36183</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=32071#p32071</link>
			<description><![CDATA[<p>Конечно. Осталось выяснить, это ли самое имел в виду автор темы, або что иное <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 08 Jan 2010 07:01:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=32071#p32071</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=32070#p32070</link>
			<description><![CDATA[<p>Насколько я знаю, если на принтере сконфигурировать опцию duplex=on, то он все задания по-умолчанию будет печатать в дуплексе. Может лучше ориентироваться на этот вариант?</p>]]></description>
			<author><![CDATA[null@example.com (dsb)]]></author>
			<pubDate>Fri, 08 Jan 2010 05:32:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=32070#p32070</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=32063#p32063</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Thu, 07 Jan 2010 17:25:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=32063#p32063</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=32062#p32062</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (max7)]]></author>
			<pubDate>Thu, 07 Jan 2010 16:31:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=32062#p32062</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=32061#p32061</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Thu, 07 Jan 2010 14:40:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=32061#p32061</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=32056#p32056</link>
			<description><![CDATA[<p>Настройки драйвера/принтера специфичны для конкретного драйвера/принтера, но есть возможность включить (в частности) дуплекс через winapi через структуры свойств драйвера/принтера. Я могу ошибаться, но если принтер поддерживает дуплекс, и он включён в настройках драйвера, то в диалоге печати появляется чекбокс &quot;двухсторонняя печать&quot;, и по-моему, это &quot;фича&quot; не доступна из VBA.</p>]]></description>
			<author><![CDATA[null@example.com (max7)]]></author>
			<pubDate>Thu, 07 Jan 2010 09:16:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=32056#p32056</guid>
		</item>
		<item>
			<title><![CDATA[Re: Excel/VBA: Установка двухсторонней печати (Duplex print)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=32054#p32054</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Thu, 07 Jan 2010 04:13:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=32054#p32054</guid>
		</item>
	</channel>
</rss>
