Выборочная печать страниц с проставлением нумерации

Автор krilovsky68, 19.06.2023, 19:44

« назад - далее »

krilovsky68

Здравствуйте.

Скажите пожалуйста, возможно ли реализовать печать с простановкой нумерации...
есть шаблон. необходимо печатать его по 10 листов.
на первой странице
1|1
2|2
на второй странице
3|3
4|4
на третьей странице
5|5
6|6
и т.д.
цифры это нумерация.
требуется:
печать страниц с нумерацией с 1 по 10, иными словами 5 страниц.
печать страниц с нумерацией с 11 по 20..., следующие 5 страниц.
и т.д.

витала мысль создать ...цать страниц на которых будет шаблон и потом уже печатать лист 1, и т.д., но хочется реализовать это более изящно.

заранее спасибо за помощь.

Владимир .

Опишите более подробно, как вы видите физически эту процедуру - "печать по 10 листов".
Вы нажали кнопку, 10 листов отправилось на печать ... и? Пауза? Перезакладка бумаги? А потом снова нажали кнопку ... или программа просто должна ждать 2 минуты или ... еще одна кнопка ПРОДОЛЖИТЬ или ...?
А если рабочий день закончился или тонер в принтере? Свет вырубили, а вы уже 90% напечатали, тогда как?

И не думайте, пожалуйста, что я издеваюсь.  ;D

krilovsky68

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

как я хотел бы видеть:
лист "форма"...
выбрал печать с 1-10 - нажал на печать распечаталось 5 листов "на печать", с нумерацией: первый  лист:1,2 ; второй лист 3,4 ; третий лист 5,6 ; четвертый лист 7,8 ; пятый лист 9-10

далее к примеру надо распечатать 31-40..., выбираешь печать с 31-40, и соответственно печатаются лист "на печать"с нумерацией: 31|31,32|32 потом 33|33,34|34 и т.д.

относительно
1. закончился рабочий день: таймер печати не требуется. Печати без всяких ограничений по времени (ненормированный рабочий день)
2. закончился тонер: в данном случае не критично. Есть достаточное количество как бумаги, так и картриджей. Смысла как то предусматривать нет.
3. вырубили свет: тоже нет смысла как то фиксировать. Энергопоставляющая компания предупреждает обычно за 3 -5 дней. Крайний раз отключали года три назад и где то на 10-15 минут. Не критично. предусматривать не требуется.
по функционалу:
4. "Пауза? Перезакладка бумаги? А потом снова нажали кнопку ... или программа просто должна ждать 2 минуты или ... еще одна кнопка ПРОДОЛЖИТЬ или ...?" - не требуется. банально просто: выбор печати и печать.
5. "а если вдруг" - тоже не требуется.

krilovsky68

#3
предложили такой вариант...

(если честно не совсем понял, как посмотреть как будет выглядеть не распечатывая. например печать в файл - пока не найдется оптимальный вариант)

еще маленький вопрос:
макрос:
Sub печать()
ActiveSheet.PrintOut Copies:=1
End Sub
можно ли вместо "1" указать ссылку на ячейку в которой указывалось бы количество копий?
грубо говоря:
ActiveSheet.PrintOut Copies:='форма'A1где в ячейке А1 будет указано количество копий

krilovsky68

к сожалению сейчас не могу проверить, так как дома...
но получилась такая таблица.
не уверен, что макрос печати правильный...
(я только учусь ;D )

заранее спасибо за помощь.
надеюсь на понимание.

Serge 007

Цитата: krilovsky68 от 19.06.2023, 22:22можно ли вместо "1" указать ссылку на ячейку в которой указывалось бы количество копий?
Можно, конечно
Например так (макрос в той книге, которую надо печатать):
Sub печать()
Dim Count_Copies&
    Count_Copies = ThisWorkbook.Sheets("форма").Range("a1")
    ActiveSheet.PrintOut Copies:=Count_Copies
End Sub

PS Используйте теги кода при оформлении текста макроса
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

#6
не совсем понял, куда этот код надо вставить...
Sub печать()
Application.ScreenUpdating = False
Sheets("sog").Visible = True
Sheets("sog").Select

Dim Count_Copies&
Count_Copies = ThisWorkbook.Sheets("форма").Range("J17")
ActiveSheet.PrintOut Copies:=Count_Copies

Sheets("sog").Visible = False
Sheets("форма").Select
Application.ScreenUpdating = True
End Sub

так будет правильно? постарался адаптировать свой код вашим примером.

Serge 007

Sub печать()
    Application.ScreenUpdating = False
        Sheets("sog").Visible = True
        Sheets("sog").Select
            ActiveSheet.PrintOut Copies:=Sheets("форма").Range("j17")
        Sheets("sog").Visible = False
        Sheets("форма").Select
    Application.ScreenUpdating = True
End Sub

PS Не надо бессмысленно цитировать
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

Сергей (@Serge 007), скажите пожалуйста, а этот код правильно написан?
Sub soglashenie()

     Dim i As Long
     Dim С As Long
     Dim ПО As Long
     
     С = Range("J10")
     ПО = Range("K10")
     
     For i = С To ПО 'это диапазон номеров
     i = i + 1
         Range("'sog'!C2:G2").Value = i '
         Worksheets(1).Calculate
         Sheets("sog").Select
         Worksheets(1).PrintOut Copies:=1, Collate:=True
         Sheets("форма").Select
     Next i
         
End Sub
на странице форма ячейка J10 это "с" ячейка K10 "по", а печать будет страницы sog
*** прошу прощение за возможно детские вопросы.

Serge 007

Цитата: krilovsky68 от 20.06.2023, 10:40код правильно написан?
Странный вопрос :)
Код делает то, что Вы от  него хотите?
Если да - то написан правильно
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

Цитата: Serge 007 от 20.06.2023, 11:14Код делает то, что Вы от  него хотите?
не пробовал. стараюсь исправить ошибки вначале, а потом пробовать.если написан правильно, значит спасибо за проверку.

Serge 007

Цитата: krilovsky68 от 20.06.2023, 11:23не пробовал
Попробуйте на примере двух-трех листов
Если что-то будет работать не так как планировалось - пишите, поможем исправить
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

#12
Сергей (@Serge 007),к сожалению почему то не распечатывает нужную страницу...
Sub soglashenie()

     Dim i As Long
     Dim С As Long
     Dim ПО As Long
     
     С = Range("J10")
     ПО = Range("K10")
     
     For i = С To ПО 'это диапазон номеров
     i = i + 1
         Range("'sog'!C2:G2").Value = i '
         Worksheets(1).Calculate
         Sheets("sog").Select
         Worksheets(1).PrintOut Copies:=1, Collate:=True
         Sheets("форма").Select
     Next i
         
End Sub

по условию: есть две страницы одна форма и вторая на печать sog.
ячейки J10 и K10 находятся на странице форма.
при нажатии на печать с условием печати 22-28 должна распечатываться страница sog: 22|22, 23|23  ; 24|24, 25|25 ; 26|26, 27|27 ; 28|28
сейчас при нажатии на кнопку печать печатается 4 страницы "форма", переход для печати на страницу sog не происходит. к сожалению не могу проверить, происходит ли проставление нумерации.

другой код сократил до Sub печать()
Sheets("naz").Select
ActiveSheet.PrintOut Copies:=Sheets("форма").Range("j17")
Sheets("naz").Visible = False
Sheets("форма").Select
End Sub
тут все работает (с учетом сокращения)

Serge 007

Цитата: krilovsky68 от 20.06.2023, 12:59ячейки J10 и K10 находятся на странице форма
Вы в коде этого не указали
Цитата: krilovsky68 от 20.06.2023, 12:59С = Range("J10")
ПО = Range("K10")
ячейки J10 и K10 берутся с активного в момент работы макроса листа, если в коде не прописан конкретный лист
В Вашем случае надо брать с листа "форма", поэтому в коде должно быть так:С = Sheets("форма").Range("J10")
ПО = Sheets("форма").Range("K10")

Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

а почему печатается страница "форма".
Если указать местоположение ячеек с данными, то получается печатать страницы sog будет?