Excel vba двухсторонняя печать

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#1

13.07.2017 15:28:41

Нашёл код для печати. Адаптировал под себя.
По отдельности листы печатаются отлично.
Но, как двустороннюю печать сделать — не представляю.
Одна моя идея: назначить двум переменным Page1 и Page2 листы, а затем присвоить их сумму третьей переменной, которую уже распечатать. Успехом она пока не увенчалась.

И теперь два вопроса:
1) Если идея с присвоением третьей переменной суммы первых двух верна, то как правильно эту сумму указать переменной?
2) Если идея не верна, то как правильно реализовать двустороннюю печать?

Принципиально важно, чтобы оба листа уходили распечатываться в дуплексе принтера.

Код
Sub PRINT_0()
    Dim i As Integer
    i = Cells(Rows.Count, "B").End(xlUp).Row
    Dim Page1, Page2, TwoPage As Object
    Set Page1 = ThisWorkbook.Sheets("ТТН_1")
    Set Page2 = ThisWorkbook.Sheets("ТТН_2")
    Set TwoPage = Page1 + Page2
    With TwoPage
        .PageSetup.Orientation = xlLandscape
        .PrintOut Copies:=2, Collate:=True, ManualDuplexPrint:=False
    End With
End Sub
 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Про двустороннюю печать было несколько (десятков) тем на форуме. ПОИСК FOREVER!

Согласие есть продукт при полном непротивлении сторон.

 

Sanja,
Искал по гуглу. Много похожих тем, но моего не нашёл. Но на всякий случай поищу по форуму.

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#4

14.07.2017 06:41:26

Цитата
Sanja написал:
Про двустороннюю печать было несколько (десятков) тем на форуме. ПОИСК FOREVER!

Почитал об этом, понял, что на офисах с 2003 по 2010 включительно двусторонняя печать проблема вселенского масштаба.
Однако, двусторонняя печать — это второе.
Первое: как вывести на печать (одностороннюю) два листа таблицы. Правильнее сказать, как назначить два листа на печать. Один назначить не трудно, вот рабочий код:

Код
Sub PRINT_0()
    Dim i As Integer
    i = Cells(Rows.Count, "B").End(xlUp).Row
    Dim Page1, Page2, TwoPage As Object
    Set Page1 = ThisWorkbook.Sheets("ТТН_1")
    Set Page2 = ThisWorkbook.Sheets("ТТН_2")
    'Set TwoPage = Page1 + Page2
    With Page1
        .PageSetup.Orientation = xlLandscape
        .PrintOut Copies:=2, Collate:=True, ManualDuplexPrint:=False
    End With
End Sub

А вот два листа как выдать разом?

Изменено: Ярослав Чикал14.07.2017 06:42:21

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#5

14.07.2017 08:32:25

Код
Sheets(Array(1, 3)).PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False

Изменено: RAN14.07.2017 08:33:16

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#6

14.07.2017 13:24:44

RAN, благодарю, это работает, =)

Код
Sub PRINT_0() 
    Sheets(Array(2, 3)).PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

Я удивлён. Оказывается, кода, чтобы распечатать надо меньше, чем я думал. Даже такой маленький код отправил задание на печать:

Код
Sub PRINT_0()
    Sheets(Array(2, 3)).PrintOut Copies:=1
End Sub

Однако, это не то.

Дело в том, что эта команда, как выделение двух листов, и их совместная печать. Эксель сначала печатает первый лист, как отдельное задание, затем второй. А если включить в свойствах печати дуплекс, то происходит странное:

Первый лист идёт на дуплекс. В первый проход при этом ничего не печатается, а лист печатается только после дуплекса. Затем идёт второй лист, но не на дуплекс, а прямиком.

Это не то. Мне нужно, чтобы два листа были соединены в одном задании, чтобы одни настройки печати применялись к обоим, и первый лист (каким бы он по счёту не был) печатался, как первый, а следующий как второй.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

Вариант 1 (посложней)
Можно долго мучаться, вдруг (вряд-ли) да и получится.
Вариант 2 (попроще)
Создаете шаблон Word, туда макросом тащите нужное, печатаете, закрываете без сохранения.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#8

14.07.2017 14:15:01

Доброе время суток.
Как вариант (не тестированный).
Делаете копию установки принтера. В его настройках по умолчанию прописываете двустороннюю печать.
Для какого-то листа выбираете этот принтер (нужно получить название принтера, так как его интерпретирует Excel).
В Immediate выполняете

Код
?Application.ActivePrinter

Получаете нечто вроде «\servernameprintername (Ne03:)»
Пробуете код

Код
Sheets(Array(2, 3)).PrintOut Copies:=1, ActivePrinter:="\servernameprintername (Ne03:)"

Цитата
Ярослав Чикал написал:
Затем идёт второй лист, но не на дуплекс, а прямиком.

Это получается из-за того, что каждый лист в общем-то имеет собственные настройки печати.

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#9

14.07.2017 14:49:58

Андрей VG, Не поможет, ибо не решена проблема объединения двух листов в одно задание печати.

Цитата
RAN написал:
Вариант 2 (попроще)
Создаете шаблон Word, туда макросом тащите нужное, печатаете, закрываете без сохранения.

Это возможно будет проделать нажатием одной кнопки?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#10

14.07.2017 23:46:21

Цитата
Ярослав Чикал написал:
Не поможет, ибо не решена проблема объединения двух листов в одно задание печати.

Только что проверил на домашнем принтере, который позволяет установить двустороннюю печать. Таблица Листа1 напечаталась на одной стороне, таблица Листа2 на другой. Задание печати было одно из двух страниц, скриншот прикладываю.
Похоже, коллега, либо гранаты не той системы, либо что-то кому-то мешает :)

Прикрепленные файлы

  • print.xlsb (16.55 КБ)
  • print.png (52.88 КБ)

Изменено: Андрей VG14.07.2017 23:50:50
(Кусочки идентификационных данных не нужны)

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#11

15.07.2017 08:42:55

Цитата
Андрей VG написал:
Похоже, коллега, либо гранаты не той системы, либо что-то кому-то мешает

Похоже =)
Буду на работе, проверю. У меня дома принтера с дуплексом нет  :)  

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#12

17.07.2017 15:59:24

Цитата
Андрей VG написал:
Похоже, коллега, либо гранаты не той системы, либо что-то кому-то мешает

Нет, похоже гранаты другой системы. Сделал копию принтера. Проверил имя принтера, как вы указали:

Код
?Application.ActivePrinter

Прописал в свойства этого принтера дуплекс, пустил на печать ваш образец — он мне выдал листы на дуплекс, да только перевернул не понятно как. Потом отправил мой документ — его по старинке: сперва лист с формой на дуплекс отправил, и на одной строное форму отпечатал, а на второй ничего. Затем второй лист формы отправил,  и тот пошёл без дуплекса. Два листа на одном листе опять не получились.
И если судить по картинке, в моём документе Лист1 — ТТН_1, Лист2 ТТН_2. Я также и указал, первый лист и второй:

Код
Private Sub PRN_BTN_Click()
    ThisWorkbook.Sheets(Array(1, 2)).PrintOut Copies:=1, ActivePrinter:="HP Color LaserJet CM6030 MFP [8E5E17] (Ne04:)"
End Sub

А печатал он по факту Первый лист и третий.
Проверил формулой ЛИСТ: ТТН_1 — лист2, ТТН_2 — лист3. Однако, в дуплекс отправляет по прежнему только первый из листов, и только на одну сторону, а второй без дуплекса.

Кстати, указание здесь конкретного принтера не помогло, пока я этот самый принтер не сделал по-умолчанию, что как бы не правильно.

Прикрепленные файлы

  • Снимок.PNG (9.18 КБ)

Изменено: Ярослав Чикал17.07.2017 16:11:28

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

Да, похоже таки гранаты :(

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#14

18.07.2017 08:16:19

Цитата
Андрей VG написал:
Да, похоже таки гранаты

Возможно позже, когда сделаю форму с применением UserForms получится.

А у меня другая идея. Быть может, проблема у меня из-за сложного устройства документа. Если выводить макросом на печать из нового документа, то быть может будет отправляться на дуплекс. Значит, макрос стоит дополнить копированием листов ТТН_1 и ТТН_2 в новый временный документ, чтобы распечатка выполнялась оттуда.

Вот нашёл пример:

Код
Sub copy()  
    Dim wb As Workbook  
    Set wb = Workbooks.Open("c:tempдругая книга.xlsm", ReadOnly:=True)  
    wb.Sheets("ТТН_1").Copy before:=ThisWorkbook.Sheets(1)  
    wb.Close False  
End Sub

А вот я попытался прикрутить, но как и следовало ожидать, нужных ключей не оказалось:

Код
Private Sub PRN_BTN_Click()
    Dim wb As Workbook    
    Set wb = Workbooks.Open("c:tempneworkbook.xlsm", ReadOnly:=False)
    wb.Sheets(Array(2, 3)).Copy before:=ThisWorkbook.Sheets(1)
    wb.Close False
    Workbooks(wb).Sheets(Array(2, 3)).PrintOut Copies:=1, ActivePrinter:="HP Color LaserJet CM6030 MFP [8E5E17] (Ne04:)"
End Sub

Изменено: Ярослав Чикал18.07.2017 08:57:33

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#15

24.07.2017 09:01:15

Сделал рабочий код, который создаёт новую книгу, добавил рабочий код, который отправляет на печать, и на выходе получил ошибку.
Что я не так сделал?

Код
Sub io()
   Dim objFSO As Object, objFile As Object
   Dim sFileName As String
   Sheets(Array(2, 3)).Copy
   With ActiveWorkbook
      .SaveAs Filename:=ThisWorkbook.Path & "New.xlsx"
      Workbook("New.xlsx").PrintOut Copies:=1, _
      ActivePrinter:="HP Color LaserJet CM6030 MFP [8E5E17] (Ne04:)"
      .Close True
   End With
   sFileName = ThisWorkbook.Path & "New.xlsx"
   Set objFSO = CreateObject("Scripting.FileSystemObject")
   Set objFile = objFSO.GetFile(sFileName)
   objFile.Delete
End Sub

Прикрепленные файлы

  • Снимок.PNG (29.19 КБ)

Изменено: Ярослав Чикал24.07.2017 09:01:35

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#16

24.07.2017 09:13:32

Доброе время суток.

Цитата
Ярослав Чикал написал:
Workbook(«New.xlsx»)

У Application нет коллекции Workbook, только Workbooks ;)

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#17

24.07.2017 12:57:16

Цитата
Андрей VG написал:
У Application нет коллекции Workbook, только Workbooks

Благодарю!
Моя идея оправдалась, теперь нормально документ выводится на двустороннюю печать, за одним исключением — второй лист перевернут (правильно для книжной ориентации). Думаю, если задать другой способ создания дуплекса (переворачивать по короткому краю), то будет то, что надо.

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#18

24.07.2017 13:21:41

Андрей VG,
Попытался задать альбомную ориентацию, и вот что вышло
Что я не так сделал опять?

Код
Sub io()    
    ThisWorkbook.Sheets(Array(2, 3)).Copy    
    With ActiveWorkbook       
        .SaveAs Filename:=ThisWorkbook.Path & "New.xlsx"       
        Workbooks("New.xlsx").Sheets("ТТН_1").Orientation = xlLandscape       
        Workbooks("New.xlsx").Sheets("ТТН_2").Orientation = xlLandscape       
        Workbooks("New.xlsx").Sheets(Array(1, 2)).PrintOut _       
        Copies:=1, ActivePrinter:="HP Color LaserJet CM6030 MFP [8E5E17] (Ne04:)"       
        .Close True    
    End With    
    Kill ThisWorkbook.Path & "New.xlsx" 
End Sub 

А, нашёл, пропустил я PageSetup:

Код
With Workbooks("New.xlsx")
          .Sheets(1).PageSetup.Orientation = xlLandscape
          .Sheets(2).PageSetup.Orientation = xlLandscape
      End With

Только установка альбомной ориентации не помогла — печатает по прежнему, как книжную (переворачивает по большему краю). Игрался с настройкой на принтере, Альбомную ставил с поворотом и с переворотом, Книжную ставил с поворотом и с переворотом — ничего не помогает

Какие есть идеи, как заставить переворачивать по меньшему краю? (кроме настройки принтера)

Изменено: Ярослав Чикал24.07.2017 14:35:09

 

Ярослав Чикал

Пользователь

Сообщений: 57
Регистрация: 19.07.2016

#19

24.07.2017 15:41:50

ЗАРАБОТАЛО!
Оказалось, что в следствие чего-то (не знаю чего) сменилось то имя принтера, (Ne04:) сменилось на (Ne05:) из-за чего все мои махинации с настройками целевой копии принтера не могли увенчаться успехом в принципе. Кстати, и вывод на выбранный принтер стал проходить без выбора этого принтера по-умолчанию в следствие распечатки из под нового документа. Теперь этот код можно успешно применять для двусторонней печати, при двух условиях:
1) Необходимо создать копию принтера с драйверами поддерживающими двустороннюю печать (и поменять название принтера в коде);
2) В настройках печати этого принтера указать по умолчанию вывод на двустороннюю печать, и не забыть поставить правильную ориентацию.

ИТОГ:
Макрос создаёт новый документ, копирует туда выбранные листы, отправляет листы этого документа на двустороннюю печать, и сразу закрывает этот документ, и удаляет его.
Спасибо всем, кто помогал!  :D

Код
Private Sub PRN_BTN_Click()
   ThisWorkbook.Sheets(Array(2, 3)).Copy
   With ActiveWorkbook
      .SaveAs Filename:=ThisWorkbook.Path & "New.xlsx"
      Workbooks("New.xlsx").Sheets(Array(1, 2)).PrintOut _
      Collate:=True, Copies:=2, ActivePrinter:=FindPrinterByPattern("(?:^| )2Sided(?: |$)")
      .Close True
   End With
   Kill ThisWorkbook.Path & "New.xlsx"
End Sub

FindPrinterByPattern

Изменено: Ярослав Чикал02.08.2017 13:18:36

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2010-01-06 16:24:05

  • Kuryachev
  • Гость

Тема: Excel/VBA: Установка двухсторонней печати (Duplex print)

Пожалуйста помогите! Возможно ли с помощью кода VBA установить/снять двухсторонюю печать листа Excel. Если нет — то как открыть диалог Печать/Свойства.

2 Ответ от alexii 2010-01-06 19:01:42

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Kuryachev, в каком Excel такое есть? В 2003 — нет.

3 Ответ от max7 2010-01-07 06:53:15 (изменено: max7, 2010-01-07 07:03:54)

  • max7
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Нет,  дуплекс можно указать в настройках принтера (не  в excel’е)  http://office.microsoft.com/en-us/word/ … 71033.aspx

Есть способ включения/выключения дуплекса http://www.mrexcel.com/forum/showthread.php?t=59285

Возможно вам будет интересен этот вариант (как альтернатива) http://www.vbforums.com/showpost.php?p= … ostcount=1

4 Ответ от alexii 2010-01-07 08:13:56

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Коллега, как раз этот, приведённый Вами, пример относится именно к возможностям самого приложения (WinWord), а не к настройкам драйвера принтера . А за ссылки — спасибо.

5 Ответ от max7 2010-01-07 13:16:24

  • max7
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Настройки драйвера/принтера специфичны для конкретного драйвера/принтера, но есть возможность включить (в частности) дуплекс через winapi через структуры свойств драйвера/принтера. Я могу ошибаться, но если принтер поддерживает дуплекс, и он включён в настройках драйвера, то в диалоге печати появляется чекбокс «двухсторонняя печать», и по-моему, это «фича» не доступна из VBA.

6 Ответ от alexii 2010-01-07 18:40:10

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

OFF: max7, как раз для WinWord’а данный флажок обрабатывается им самим безо всякого участия драйвера принтера (что, конечно, не отменяет возможность задействовать не его, а возможность двусторонней печати через сам драйвер принтера, если тот поддерживает такую возможность). В данном случае, для WinWord’а это:

Application.PrintOut ManualDuplexPrint:=True

Печатается одна сторона листов (нечётная), затем он просит вынуть/повернуть/вставить листы, затем печатается вторая сторона листов (чётная).

7 Ответ от max7 2010-01-07 20:31:00

  • max7
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

alexii пишет:

Печатается одна сторона листов (нечётная), затем он просит вынуть/повернуть/вставить листы, затем печатается вторая сторона листов (чётная).

Ну это не дуплекс, это насмешка какая-то. Я предпочитаю управлять двусторонней печатью «в ручную»: печатаю нечётные, затем выдаю диалог вроде «переверните/продолжать/отмена», печатаю чётные, и т.п.

P.S.: Самое интересное (я немного изучал это вопрос), что при «прямой печати» на принтер/спуллер (форматы к PCL, PostScript, и т.д. смотря какой поддерживает принтер, либо эмулятор в драйвере) в «текущем сеансе печати» задавать режимы печати очень просто (в winapi есть специальные методы ). Для PCL это по сути однобайтовая команда, для PS — вызов процедуры.

8 Ответ от alexii 2010-01-07 21:25:21

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

max7 пишет:

Я предпочитаю управлять двусторонней печатью «в ручную»: печатаю нечётные, затем выдаю диалог вроде «переверните/продолжать/отмена», печатаю чётные, и т.п.

Оно именно так и есть.

Я тоже как-то делал для себя под Access’ом, только чуть иначе: из отчёта формата A5 делал брошюру на листах A4, дабы можно было потом просто сложить пополам и скрепить. Так сказать четырёхсторонняя печать — нужно было трижды поворачивать листы. Было весьма весело, но всё-таки сделал и потом печатал.

9 Ответ от dsb 2010-01-08 09:32:22

  • dsb
  • Разработчик
  • Неактивен
  • Рейтинг : [0|0]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Насколько я знаю, если на принтере сконфигурировать опцию duplex=on, то он все задания по-умолчанию будет печатать в дуплексе. Может лучше ориентироваться на этот вариант?

10 Ответ от alexii 2010-01-08 11:01:21

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Конечно. Осталось выяснить, это ли самое имел в виду автор темы, або что иное .

11 Ответ от smaharbA 2010-05-28 08:55:34

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [0|0]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Эта же проблема возникла давее как вчера
имеем книгу со 125 листами на каждом по 4 печатных страницы — как включить для каждого двухстороннюю печать ?
или усложним — как при ранее настроенных в ручнуюю свойствах в параметрах страницы изменить часть листов на двухстороннюю печать, часть на одностороннюю ?

Я конечно далек от мысли… (с)

12 Ответ от Kuryachev 2010-06-08 13:38:30

  • Kuryachev
  • Гость

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Я разработал код, но сразу хочу сказать что он кривоват, поскольку для Экселя ничего в VBA под дуплекс не разработано(не могу сказать за Офис 2010 есть ли там какие-то добавления). А по сему как-то вот так:

Sub Duplex() 'установка двухсторонней печати
 Dim prntr As String
 prntr = "rundll32 printui.dll,PrintUIEntry /e /n " & Chr(34) & Printer & Chr(34) 'справка в C:WindowsSystem32printui.exe
    Shell prntr, vbNormalFocus '
    Application.Wait (Now + TimeValue("0:00:02"))
    Application.SendKeys "+{TAB}{RIGHT}{RIGHT}%y", True 'данную строку необходимо подгонять под конкретный принтер методом тыка
End Sub

Для меня также важен код для определения поддержки (или нет) дуплекса используемым принтером.
Заранее благодарен.

13 Ответ от Medeg1971 2010-08-16 08:39:19

  • Medeg1971
  • Гость

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Всем доброго времени суток!
Уже месяц бьюсь пальцами об «клаву» по этой же теме, и ничего не придумал лучше ниже следующего:

Перед тем как выводить на печать в дуплексе из Екселя, необходимо создать два файла на диске «C:», которые будут содержать все настройки принтера.
Первый будет содержать настройки принтера по умолчанию, а второй настройки для печати в дуплексе.
Первый файл «Default.dat» можно создать сразу нижеследующей строкой из любого командера или в CMD.EXE, если принять
во внимание что принтер и так настроен по умолчанию: «C:WindowsSystem32printui.exe /Ss /n «Имя принтера» /a «C:Default.dat».
Имя принтера — принтер по умолчанию, например: HP LaserJet 2200 Series PCL 5.
Перед созданием второго — «Duplex.dat», сначала необходимо зайти в настройки принтера и включить дуплекс в двух закладках — «Общие» -> «Настройка…» и
«Дополнительно» -> «умолчания…».
Обе панели должны быть настроены одинаково, только в этом случае обеспечивается надежная печать в дуплексе.
Затем нижеследующей строкой в CMD.EXE сохраняется второй файл настроек принтера:
«C:WindowsSystem32printui.exe /Ss /n «Имя принтера» /a «C:Duplex.dat».
Теперь можно написать макрос который будет вызывать программу, с помощью которой будут меняться настройки принтера на дуплекс, затем печать и возврат принтера
в исходное состояние.

Sub DuplexPrint()

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

' Кому нравится чтобы во время печати мелькали черные окна командной строки, может после функции Shell вместо
' "rundll32 printui.dll,PrintUIEntry ***"
' написать следующее:
' "CMD /c C:WindowsSystem32printui.exe ***"

End Sub

Выше приведенный макросовый изврат является дороботкой макроса написаного «Kuryachev»-ым (да, простит меня автор).
Отличие заключается в отсутствии необходимости писать в макросе конкретный принтер и подгонять параметры включения принтера в дуплекс
методом тыка, что для многих может стать «камнем предкновения».
Также можно подготовить файлы настроек принтера для любых других случаев печати из Екселя, например: режим брошюры.
Тем не мение, данный способ остается извратом, так как:
— меняет настройки самого драйвера принтера, а не Екселя
— необходимо держать на диске файлы настроек принтера
— для работоспособности макроса необходимо предварительно создать эти файлы настроек
— нельзя перенести макрос на другой комп и сразу работать (например: отправить по почте готовую таблицу пользователю
   не объяснив как создать и куда положить файлы настроек)
— нельзя определить поддерживает ли вообще принтер дуплекс.

А, мелкософту за это ОГРОМНЫЙ -М-И-Н-У-С-.

14 Ответ от Bagir 2010-10-11 14:44:46

  • Bagir
  • Гость

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Тоже давно ищу способ. Нашел замечательный такой пример: Duplex Printing — MrExcel Message Board. Отлично работает. Красиво оформлен и даже обработка ошибок. Похоже умелые руки его делали .
строку:

strvbPrinter = Left$(strPrinter, 24)

заменить на:

strvbPrinter = Left(strPrinter, InStrRev(strPrinter, " ") - 1)

чтобы нормально отрезать хвостик от имени принтера, полученного с помощью Application.ActivePrinter.

Но фишка в следующем: Переключает дуплекс то он отлично, но Excel зараза помнит с какими настройками при открытии он этот принтер взял. То же самое наблюдается и в уже предоставленных тут примерах. То есть чтобы понять, можно отбросить макросы в сторону.
Открываем Excel
делаем файл -> Печать
Смотрим настройки принтера
Смотрим как выставлен дуплекс
Далее ничего не изменяя закрываем настройки.
Давим кнопку «Пуск» -> Принтеры и факсы
Открываем свойства принтера и меняем дуплекс.
Закрываем с сохранением. (именно это и делают все найденные мною примеры включая этот)
Открываем диалог печати в Excel и смотрим свойства принтера — Дуплекс.

Нашего переключения, которое было сделано через «Принтеры и факсы» мы не видим. То есть Excel запомнил состояние принтера при старте.
Как бы научить его считать настройки принтеров заново, тогда бы модуль был на все 100% рабочий, и управлять дуплексом из VBA было бы реально.

15 Ответ от Bagir 2010-10-11 15:18:07

  • Bagir
  • Гость

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Вот еще вариант переключения дуплекса с использованием DLL: VBA, office, VBS or shell duplex printing — VBForums.

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

16 Ответ от smaharbA 2010-10-11 17:22:20

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [0|0]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

не все так просто, но ексель это может, нужно узнать ДиСи окна и дальше пойдет

Я конечно далек от мысли… (с)

17 Ответ от Bagir 2010-10-11 19:55:51

  • Bagir
  • Гость

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

В общем задача решена с горем пополам, а я уж было и не верил в боле менее приемлемый вариант. Менять настройки у принтера, выбранного для печати т.е. Application.ActivePrinter бес толку. Excel все равно помнит свои параметры принтера. Вывод: Выбираем другой принтер, меняем у нужного, и выбираем его. Тогда настройки будут такими, какие в этот момент в памяти драйвера.
На данный момент есть два примера. Один очень короткий с использованием сторонней dll, другой увесистый, но полностью на VB. Оба примера не оставляют паразитных черных окон и прочей чешуи. Но минус у них общий. При работе VBA изменяются параметры драйвера принтера, т.е. переключение дуплекса идет в нем. Если в этот момент работают другие проги, и для них это критично, то вероятно это решение не подойдет. Но немного разгоню тучи. Можно сделать таким образом, чтобы первоначальное состояние настройки возвращалось после печати.

18 Ответ от alexii 2010-10-11 22:25:37

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Bagir, прочтите справку по BBCode и используйте теги. Я поправил Ваши посты.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

1

Excel

22.05.2021, 11:43. Показов 6445. Ответов 19


Студворк — интернет-сервис помощи студентам

Здравствуйте. Хочу привязать к кнопке печать макрос для печати два листа но одной бумаге с функцией Переворачивать страницы относительно короткого края

Файл во вложении



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

22.05.2021, 11:43

19

810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

22.05.2021, 12:33

2

И в чем вопрос? ПКМ по кнопке — Назначить макрос — пишем/выбираем имя макроса. А в нем уже необходимый код.



0



0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

23.05.2021, 13:58

 [ТС]

3

Zeag, Мне нужен необходимый код



0



ᴁ®

Эксперт MS Access

3069 / 1735 / 361

Регистрация: 13.12.2016

Сообщений: 5,937

Записей в блоге: 4

23.05.2021, 14:27

4

Цитата
Сообщение от Karina4
Посмотреть сообщение

Мне нужен необходимый код

Еще пару одноименных тем и ваша настойчивость будет возграждена баном!
Лично я — за.



0



810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

23.05.2021, 14:37

5

У вас пустой лист. Откуда знать, какой диапазон и какие листы печатаются?

«Нет ТЗ — результат ХЗ» (с)



0



0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

23.05.2021, 20:57

 [ТС]

6

Zeag, Зачем вы всё усложняете ? Вы даже не пытаетесь мне помочь, вы только пытаетесь унизить.

Там же написано Лицевая сторона, обратная сторона. Что непонятного ? Область печати уже установлен

Области печати:

Лицевая сторона A1 J48

Обратная сторона K1 T48

Вот так понятно ?

Что еще вы придумаете чтобы меня унизить ?



0



0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

23.05.2021, 21:05

 [ТС]

7

Напишите пожалуйста код для печати двух страниц на одном листе с функцией Переворачивать страницы относительно короткого края

Области печати:

Лицевая сторона A1 J48

Обратная сторона K1 T48

Файл во вложении



0



Zeag

810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

23.05.2021, 21:16

8

Лучший ответ Сообщение было отмечено Karina4 как решение

Решение

У меня ваш файл показывается как на скрине, так что печатает по 2 листа. Но вроде то, что хотели.
Если в файл (сперва, чтобы не тратить бумагу), то убрать апострофы.

Visual Basic
1
2
3
4
5
Sub TwoPage()
   ActiveSheet.Range("A1:J48").PrintOut 'PrintToFile:=True, PrToFileName:=ThisWorkbook.Path & "out1.xps"
   MsgBox "Переверните страницу"
   ActiveSheet.Range("K1:T48").PrintOut 'PrintToFile:=True, PrToFileName:=ThisWorkbook.Path & "out2.xps"
End Sub

Миниатюры

Двухсторонняя печать в EXEL. Код VBA
 



1



0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

24.05.2021, 23:15

 [ТС]

9

Zeag, У вас почему то страничный режим, не знаю почему, я сохраняла в обычном режиме

Спасибо за код. Проверю на работе



0



810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

24.05.2021, 23:38

10

Я поставил страничный режим, чтобы посмотреть границы страниц.



0



11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

25.05.2021, 07:58

11

с функцией Переворачивать страницы относительно короткого края

У вас есть такая функция в принтере? сам переворачивает?
Тогда попробуйте задать вывод на печать с этой функцией с записью макроса
Возможно запишет параметр
У меня такого нет — проверить не могу



1



0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

25.05.2021, 10:46

 [ТС]

12

Zeag, Zeag, Ваш код не печатает вьдвухстороннем режиме, он печатает листы по отдельно, у меня принтер с функцией двухсторонней печати



0



810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

25.05.2021, 10:52

13

Мы на удаленке. У меня дома вообще никакого принтера нет. На работе без двухсторонки. Тыкать пальцем в небо в программировании проблематично. И сколь я вижу в гугле при поиске «excel двусторнняя печать», это вообще проблема не экселя, а настроек принтера — в нем отмечается соответствующий пункт. Для примера выведите в ОДИН (!) файл и потом из проводника его отправьте на ваш принтер и посмотрите результат.



1



Karina4

0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

25.05.2021, 12:00

 [ТС]

14

Alex77755, Это хорошая идея, получился вот такой код

PureBasic
1
2
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False

Только как бы мне сделать чтобы на печать вывелить область печати «A1:I52» «J1:R52»



0



Zeag

810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

25.05.2021, 12:03

15

Посмотрите на разницу кодов:

Visual Basic
1
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
Visual Basic
1
ActiveSheet.Range("A1:J48").PrintOut

Ничего не замечаете в части до PrintOut?



1



0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

25.05.2021, 12:28

 [ТС]

16

Zeag, на рабочем принтере область печати почему то изменилась. у меня дома по другому, я изменила область печати на A1:R52



0



810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

25.05.2021, 12:30

17

Лучший ответ Сообщение было отмечено Karina4 как решение

Решение

Я к тому, что попробовал бы указать область печати и затем Copies:=1, Collate:=True, IgnorePrintAreas:=False
Но без принтера сложно сказать, какой будет результат.
Область печати от настроек принтера зависит, похоже. Я делал одну задачу, где надо было вставлять границы листов — и тоже на разных ПК отличалось.



1



Karina4

0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

25.05.2021, 13:40

 [ТС]

18

Zeag, У меня уже есть рабочий код

Bash
1
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False

этот код печатает с двух сторон заданую обрасть печати

Мне его нужно переделать чтобы код сам задавал область печати, область печати A1:R52



0



Zeag

810 / 465 / 180

Регистрация: 09.03.2009

Сообщений: 1,577

25.05.2021, 13:49

19

Проверьте так. Но еще раз — вслепую работать трудно.

Visual Basic
1
ActiveSheet.Range("A1:R52").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False



1



0 / 2 / 0

Регистрация: 09.11.2020

Сообщений: 334

03.06.2021, 22:09

 [ТС]

20

Разобралась. Спасибо. Оказывается всё было очень просто, просто нужно было один раз распечатать лист с функцией двухсторонней печати и сохранить файл, потом в коде печати указать диапазон печати двух листов, и всё, больше ничего не нужно

при нажатии на кнопку печать эти два листа выходят в функцией двухсторонней печати так как мы сохраняли файл в таком виде

Всем спасибо за отзывчивость



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

03.06.2021, 22:09

Помогаю со студенческими работами здесь

Нумерация страниц и двухсторонняя печать
Задача:
Распечатать i одинаковых страниц (создав одну), но пронумерованных от 1 до i.
Макрос: …

Canon mf3010 двухсторонняя печать
Доброго времени суток. Установлен принтер Canon mf3010 последние драйвера, возможно ли включить…

Двухсторонняя печать excel файла
Всем привет.Парни я снова со своей двухсторонней печатью файла. Я печатаю excel файл, но у меня не…

Двухсторонняя печать документа ворд из делфи
Помогите пожалуйста:

Printout(from, To, Copies, Preview, ActivePrinter, PrintToFile,…

Программно узнать, есть ли на принтере двухсторонняя печать
здравствуйте, сабж+если есть, то напечатать с обратной стороны листа куэр-код напечатанного текста,…

VBS. Изменение свойства принтера — двухсторонняя печать
Через WMI могу получить значение свойства Duplex в классе Win32_PrinterConfiguration. А как…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Содержание

  1. Excel/VBA: Установка двухсторонней печати (Duplex print)
  2. Сообщения 18
  3. 1 Тема от Kuryachev 2010-01-06 16:24:05
  4. Тема: Excel/VBA: Установка двухсторонней печати (Duplex print)
  5. 2 Ответ от alexii 2010-01-06 19:01:42
  6. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  7. 3 Ответ от max7 2010-01-07 06:53:15 (изменено: max7, 2010-01-07 07:03:54)
  8. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  9. 4 Ответ от alexii 2010-01-07 08:13:56
  10. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  11. 5 Ответ от max7 2010-01-07 13:16:24
  12. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  13. 6 Ответ от alexii 2010-01-07 18:40:10
  14. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  15. 7 Ответ от max7 2010-01-07 20:31:00
  16. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  17. 8 Ответ от alexii 2010-01-07 21:25:21
  18. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  19. 9 Ответ от dsb 2010-01-08 09:32:22
  20. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  21. 10 Ответ от alexii 2010-01-08 11:01:21
  22. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  23. 11 Ответ от smaharbA 2010-05-28 08:55:34
  24. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  25. 12 Ответ от Kuryachev 2010-06-08 13:38:30
  26. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  27. 13 Ответ от Medeg1971 2010-08-16 08:39:19
  28. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  29. 14 Ответ от Bagir 2010-10-11 14:44:46
  30. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  31. 15 Ответ от Bagir 2010-10-11 15:18:07
  32. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  33. 16 Ответ от smaharbA 2010-10-11 17:22:20
  34. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  35. 17 Ответ от Bagir 2010-10-11 19:55:51
  36. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  37. 18 Ответ от alexii 2010-10-11 22:25:37
  38. Re: Excel/VBA: Установка двухсторонней печати (Duplex print)
  39. Printout vba excel двусторонняя печать

Excel/VBA: Установка двухсторонней печати (Duplex print)

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 18

1 Тема от Kuryachev 2010-01-06 16:24:05

  • Kuryachev
  • Гость

Тема: Excel/VBA: Установка двухсторонней печати (Duplex print)

Пожалуйста помогите! Возможно ли с помощью кода VBA установить/снять двухсторонюю печать листа Excel. Если нет — то как открыть диалог Печать/Свойства.

2 Ответ от alexii 2010-01-06 19:01:42

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Kuryachev, в каком Excel такое есть? В 2003 — нет.

3 Ответ от max7 2010-01-07 06:53:15 (изменено: max7, 2010-01-07 07:03:54)

  • max7
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Нет, дуплекс можно указать в настройках принтера (не в excel’е) http://office.microsoft.com/en-us/word/ … 71033.aspx

Возможно вам будет интересен этот вариант (как альтернатива) http://www.vbforums.com/showpost.php?p= … ostcount=1

4 Ответ от alexii 2010-01-07 08:13:56

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Коллега, как раз этот, приведённый Вами, пример относится именно к возможностям самого приложения (WinWord), а не к настройкам драйвера принтера . А за ссылки — спасибо.

5 Ответ от max7 2010-01-07 13:16:24

  • max7
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Настройки драйвера/принтера специфичны для конкретного драйвера/принтера, но есть возможность включить (в частности) дуплекс через winapi через структуры свойств драйвера/принтера. Я могу ошибаться, но если принтер поддерживает дуплекс, и он включён в настройках драйвера, то в диалоге печати появляется чекбокс «двухсторонняя печать», и по-моему, это «фича» не доступна из VBA.

6 Ответ от alexii 2010-01-07 18:40:10

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

OFF: max7, как раз для WinWord’а данный флажок обрабатывается им самим безо всякого участия драйвера принтера (что, конечно, не отменяет возможность задействовать не его, а возможность двусторонней печати через сам драйвер принтера, если тот поддерживает такую возможность). В данном случае, для WinWord’а это:

Печатается одна сторона листов (нечётная), затем он просит вынуть/повернуть/вставить листы, затем печатается вторая сторона листов (чётная).

7 Ответ от max7 2010-01-07 20:31:00

  • max7
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Печатается одна сторона листов (нечётная), затем он просит вынуть/повернуть/вставить листы, затем печатается вторая сторона листов (чётная).

Ну это не дуплекс, это насмешка какая-то. Я предпочитаю управлять двусторонней печатью «в ручную»: печатаю нечётные, затем выдаю диалог вроде «переверните/продолжать/отмена», печатаю чётные, и т.п.

P.S.: Самое интересное (я немного изучал это вопрос), что при «прямой печати» на принтер/спуллер (форматы к PCL, PostScript, и т.д. смотря какой поддерживает принтер, либо эмулятор в драйвере) в «текущем сеансе печати» задавать режимы печати очень просто (в winapi есть специальные методы ). Для PCL это по сути однобайтовая команда, для PS — вызов процедуры.

8 Ответ от alexii 2010-01-07 21:25:21

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Я предпочитаю управлять двусторонней печатью «в ручную»: печатаю нечётные, затем выдаю диалог вроде «переверните/продолжать/отмена», печатаю чётные, и т.п.

Оно именно так и есть.

Я тоже как-то делал для себя под Access’ом, только чуть иначе: из отчёта формата A5 делал брошюру на листах A4, дабы можно было потом просто сложить пополам и скрепить. Так сказать четырёхсторонняя печать — нужно было трижды поворачивать листы. Было весьма весело, но всё-таки сделал и потом печатал.

9 Ответ от dsb 2010-01-08 09:32:22

  • dsb
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Насколько я знаю, если на принтере сконфигурировать опцию duplex=on, то он все задания по-умолчанию будет печатать в дуплексе. Может лучше ориентироваться на этот вариант?

10 Ответ от alexii 2010-01-08 11:01:21

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Конечно. Осталось выяснить, это ли самое имел в виду автор темы, або что иное .

11 Ответ от smaharbA 2010-05-28 08:55:34

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Эта же проблема возникла давее как вчера
имеем книгу со 125 листами на каждом по 4 печатных страницы — как включить для каждого двухстороннюю печать ?
или усложним — как при ранее настроенных в ручнуюю свойствах в параметрах страницы изменить часть листов на двухстороннюю печать, часть на одностороннюю ?

12 Ответ от Kuryachev 2010-06-08 13:38:30

  • Kuryachev
  • Гость

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Я разработал код, но сразу хочу сказать что он кривоват, поскольку для Экселя ничего в VBA под дуплекс не разработано(не могу сказать за Офис 2010 есть ли там какие-то добавления). А по сему как-то вот так:

Для меня также важен код для определения поддержки (или нет) дуплекса используемым принтером.
Заранее благодарен.

13 Ответ от Medeg1971 2010-08-16 08:39:19

  • Medeg1971
  • Гость

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Всем доброго времени суток!
Уже месяц бьюсь пальцами об «клаву» по этой же теме, и ничего не придумал лучше ниже следующего:

Перед тем как выводить на печать в дуплексе из Екселя, необходимо создать два файла на диске «C:», которые будут содержать все настройки принтера.
Первый будет содержать настройки принтера по умолчанию, а второй настройки для печати в дуплексе.
Первый файл «Default.dat» можно создать сразу нижеследующей строкой из любого командера или в CMD.EXE, если принять
во внимание что принтер и так настроен по умолчанию: «C:WindowsSystem32printui.exe /Ss /n «Имя принтера» /a «C:Default.dat».
Имя принтера — принтер по умолчанию, например: HP LaserJet 2200 Series PCL 5.
Перед созданием второго — «Duplex.dat», сначала необходимо зайти в настройки принтера и включить дуплекс в двух закладках — «Общие» -> «Настройка. » и
«Дополнительно» -> «умолчания. «.
Обе панели должны быть настроены одинаково, только в этом случае обеспечивается надежная печать в дуплексе.
Затем нижеследующей строкой в CMD.EXE сохраняется второй файл настроек принтера:
«C:WindowsSystem32printui.exe /Ss /n «Имя принтера» /a «C:Duplex.dat».
Теперь можно написать макрос который будет вызывать программу, с помощью которой будут меняться настройки принтера на дуплекс, затем печать и возврат принтера
в исходное состояние.

Выше приведенный макросовый изврат является дороботкой макроса написаного «Kuryachev»-ым (да, простит меня автор).
Отличие заключается в отсутствии необходимости писать в макросе конкретный принтер и подгонять параметры включения принтера в дуплекс
методом тыка, что для многих может стать «камнем предкновения».
Также можно подготовить файлы настроек принтера для любых других случаев печати из Екселя, например: режим брошюры.
Тем не мение, данный способ остается извратом, так как:
— меняет настройки самого драйвера принтера, а не Екселя
— необходимо держать на диске файлы настроек принтера
— для работоспособности макроса необходимо предварительно создать эти файлы настроек
— нельзя перенести макрос на другой комп и сразу работать (например: отправить по почте готовую таблицу пользователю
не объяснив как создать и куда положить файлы настроек)
— нельзя определить поддерживает ли вообще принтер дуплекс.

А, мелкософту за это ОГРОМНЫЙ -М-И-Н-У-С-.

14 Ответ от Bagir 2010-10-11 14:44:46

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Тоже давно ищу способ. Нашел замечательный такой пример: Duplex Printing — MrExcel Message Board. Отлично работает. Красиво оформлен и даже обработка ошибок. Похоже умелые руки его делали .
строку:

чтобы нормально отрезать хвостик от имени принтера, полученного с помощью Application.ActivePrinter.

Но фишка в следующем: Переключает дуплекс то он отлично, но Excel зараза помнит с какими настройками при открытии он этот принтер взял. То же самое наблюдается и в уже предоставленных тут примерах. То есть чтобы понять, можно отбросить макросы в сторону.
Открываем Excel
делаем файл -> Печать
Смотрим настройки принтера
Смотрим как выставлен дуплекс
Далее ничего не изменяя закрываем настройки.
Давим кнопку «Пуск» -> Принтеры и факсы
Открываем свойства принтера и меняем дуплекс.
Закрываем с сохранением. (именно это и делают все найденные мною примеры включая этот)
Открываем диалог печати в Excel и смотрим свойства принтера — Дуплекс.

Нашего переключения, которое было сделано через «Принтеры и факсы» мы не видим. То есть Excel запомнил состояние принтера при старте.
Как бы научить его считать настройки принтеров заново, тогда бы модуль был на все 100% рабочий, и управлять дуплексом из VBA было бы реально.

15 Ответ от Bagir 2010-10-11 15:18:07

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Вот еще вариант переключения дуплекса с использованием DLL: VBA, office, VBS or shell duplex printing — VBForums.

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

16 Ответ от smaharbA 2010-10-11 17:22:20

  • smaharbA
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

не все так просто, но ексель это может, нужно узнать ДиСи окна и дальше пойдет

17 Ответ от Bagir 2010-10-11 19:55:51

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

В общем задача решена с горем пополам, а я уж было и не верил в боле менее приемлемый вариант. Менять настройки у принтера, выбранного для печати т.е. Application.ActivePrinter бес толку. Excel все равно помнит свои параметры принтера. Вывод: Выбираем другой принтер, меняем у нужного, и выбираем его. Тогда настройки будут такими, какие в этот момент в памяти драйвера.
На данный момент есть два примера. Один очень короткий с использованием сторонней dll, другой увесистый, но полностью на VB. Оба примера не оставляют паразитных черных окон и прочей чешуи. Но минус у них общий. При работе VBA изменяются параметры драйвера принтера, т.е. переключение дуплекса идет в нем. Если в этот момент работают другие проги, и для них это критично, то вероятно это решение не подойдет. Но немного разгоню тучи. Можно сделать таким образом, чтобы первоначальное состояние настройки возвращалось после печати.

18 Ответ от alexii 2010-10-11 22:25:37

  • alexii
  • Разработчик
  • Неактивен

Re: Excel/VBA: Установка двухсторонней печати (Duplex print)

Bagir, прочтите справку по BBCode и используйте теги. Я поправил Ваши посты.

Источник

Printout vba excel двусторонняя печать

Модератор форума: китин, _Boroda_

Мир MS Excel » Вопросы и решения » Вопросы по Excel » Двухсторонняя печать средствами VBA (Переключение на двухстороннюю печать и обратно.)

Двухсторонняя печать средствами VBA

Bagir Дата: Вторник, 12.10.2010, 12:18 | Сообщение № 1
Bagir Дата: Вторник, 12.10.2010, 15:30 | Сообщение № 2
Bagir Дата: Пятница, 05.10.2012, 00:00 | Сообщение № 3
Полковник МВД Дата: Пятница, 05.10.2012, 00:05 | Сообщение № 4
Bagir Дата: Пятница, 05.10.2012, 00:37 | Сообщение № 5
Bagir Дата: Пятница, 05.10.2012, 00:49 | Сообщение № 6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

KuklP Дата: Пятница, 05.10.2012, 11:08 | Сообщение № 7
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

Bagir Дата: Пятница, 05.10.2012, 11:16 | Сообщение № 8
Bagir Дата: Пятница, 05.10.2012, 11:19 | Сообщение № 9

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

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

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

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

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

Так где же находятся параметры принтера, которые уже прочитал и запомнил Екс? Автор — Bagir
Дата добавления — 05.10.2012 в 11:19

KuklP Дата: Пятница, 05.10.2012, 11:37 | Сообщение № 10
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

Bagir Дата: Пятница, 05.10.2012, 11:46 | Сообщение № 11

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

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

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

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

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

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

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

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

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

Bagir Дата: Пятница, 05.10.2012, 11:51 | Сообщение № 12

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

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

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

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

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

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

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

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

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

Источник

Adblock
detector

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

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

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

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

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

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

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

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

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

макрос для двусторонней печати диапазонов на одном листе с разной ориентацией

Модератор:Naeel Maqsudov

clar

Сообщения:14
Зарегистрирован:25 фев 2013, 13:59

Здравствуйте,
помогите, пожалуйста, создать макрос (Excel) для двусторонней печати на одном листе:
диапазон A1:Q50 — книжная ориентация на 1 лист,
диапазон T10:AQ25- альбомная ориентация на оборотной стороне листа

pashulka

Сообщения:831
Зарегистрирован:24 ноя 2004, 03:46
Контактная информация:

11 сен 2014, 11:55

Если воспользоваться записью макроса (макрорекордером), то получается что-то вроде нижеопубликованного кода :

Код: Выделить всё

Private Sub Test()
    With ActiveSheet.PageSetup
         .PrintArea = "A1:Q50"
         .Orientation = xlPortrait
         .FitToPagesWide = 1
         .FitToPagesTall = 1
         .Parent.PrintOut
         
         MsgBox "Переверните лист для печати", vbInformation, ""
         
         .PrintArea = "T10:AQ25"
         .Orientation = xlLandscape
         .FitToPagesWide = 1
         .FitToPagesTall = 1
         .Parent.PrintOut
    End With
End Sub

А ежели после печати нужно сбросить установленные настройки, то, опять же, макрорекордер выдаёт следущее :

Код: Выделить всё

ActiveSheet.PageSetup.PrintArea = "" 'Сброс области печати
ActiveSheet.ResetAllPageBreaks     'Сброс разрывов страниц

clar

Сообщения:14
Зарегистрирован:25 фев 2013, 13:59

11 сен 2014, 13:16

Спасибо, можно создать в макросе:
1) чтобы подача бумаги (переворот) был не ручная, а автоматическая
2) создать кнопку для этого макроса на панели.

Заранее спасибо

pashulka

Сообщения:831
Зарегистрирован:24 ноя 2004, 03:46
Контактная информация:

11 сен 2014, 13:36

1) Если такая возможность и существует, то мне она неизвестна, ибо с принтерами, которые выполняют все мои обязанности, лично я, не сталкивался. Но даже если она и есть, уверен, что зависит она от модели принтера и вряд ли напрямую «управляется» командами VBA.
P.S. Возможно, используя соответствующие функции WinAPI, Вы и сможете добиться желаемого … но возможности проверить эту гипотезу, у меня, увы, нет.
2) В XL97-2003 легко, следующие версии уже не ко мне :)

pashulka

Сообщения:831
Зарегистрирован:24 ноя 2004, 03:46
Контактная информация:

12 сен 2014, 14:50

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

Т.к. статья касается «чистого» VB и в примере используется об’ект Printer, которого нет в VBA, то Printer.DeviceName можно попробовать заменить на Application.ActivePrinter и если это не прокатит, то на переменную strPrinter

Код: Выделить всё

Dim strPrinter As String
strPrinter = Application.ActivePrinter
      
If strPrinter Like "*(* :) " Then
   strPrinter = RTrim(Left(strPrinter, InStrRev(strPrinter, "(") - 1))
End If

Понравилась статья? Поделить с друзьями:
  • Excel vba дата сохранения файла
  • Excel vba дата изменения файла
  • Excel vba группировать строки
  • Excel vba границы таблицы
  • Excel vba границы листа