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

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

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

Serge 007

Цитата: krilovsky68 от 20.06.2023, 13:45почему печатается страница "форма"
Потому что лист "форма" имеет индекс 1, который Вы указали в коде:
Worksheets(1).PrintOut
Цитата: krilovsky68 от 20.06.2023, 13:45Если указать местоположение ячеек с данными, то получается печатать страницы sog будет?
Нет
Надо ещё явно указывать лист для печати
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

#16
Цитата: Serge 007 от 20.06.2023, 13:53Надо ещё явно указывать лист для печати
не подскажите как?
Изменить Worksheets(1) на Worksheets("sog")
как можно посмотреть какой индекс у страниц?
если я правильно понял, то изменение индекса будет указывать страницу, которая подлежит печати. верно?
а строка Sheets("sog").Select, разве не говорит что нужно именно эту страницу печатать?
извините, пишу с телефона, возможно ошибся с тегом

Serge 007

Изменить Worksheets(1) на Worksheets(2)
Лист sog - второй по счету в файле
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Serge 007

Цитата: krilovsky68 от 20.06.2023, 14:41строка
Sheets("sog").Select, разве не говорит что нужно именно эту страницу печатать?
Нет
Эта строка всего лишь выделяет лист "sog", но уже следующая строка кода:
Worksheets(1).PrintOut Copies:=1, Collate:=True отправляет на печать лист "форма", поскольку этот лист имеет индекс 1

Если уж Вы хотите, что бы печатался активный лист при его активации, то надо написать в коде так:
Sheets("sog").Activate
ActiveSheet.PrintOut Copies:=1

Цитата: krilovsky68 от 20.06.2023, 14:41пишу с телефона, возможно ошибся с тегом
Теги кода обязательны, когда Вы выкладываете код полностью или его куски, но для одного оператора можно использовать простое выделение, например жирный шрифт или цветом

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

krilovsky68

Сергей, я правильно понимаю, что отягощать конструкцию макроса нет смысла и возможно ограничится вариантом из ответа (17) или лучше использовать вариант из 18 ответа.
по сути же это одно и тоже.

Serge 007

Цитата: krilovsky68 от 20.06.2023, 14:41изменение индекса будет указывать страницу, которая подлежит печати. верно?
Нет
Номера страниц указываются в аргументах метода PrintOut, а индексы применяются для выбора листа, страницы которого будут отправлены на печать
Например, строка кода
Worksheets(4).PrintOut 2, 4, 1 отправит на печать по одной копии страницы со второй по четвертую четвертого листа ("список") Вашего файла
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

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

Serge 007

Цитата: krilovsky68 от 20.06.2023, 15:28лист и страницы не тождественны
Разумеется :)

Цитата: krilovsky68 от 20.06.2023, 15:28запутался
Четко и кратко опишите задачу на основе Вашего файла
Примеры кода приводить не надо, только текст задачи
Попробуем сразу написать итоговый код

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

krilovsky68

постарался учесть ваши советы. надеюсь что правильно
Sub soglashenie()

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

 Sheets("форма").Select
     Next i
        
End Sub

krilovsky68

Цитата: Serge 007 от 20.06.2023, 15:31текст задачи
Попробуем сразу написать итоговый код
на странице форма указываем с по какую нумерацию печатать.
нажимаем печать.
печатается страница sog с выбранной нумерацией

Serge 007

Цитата: Serge 007 от 20.06.2023, 15:31итоговый код
К сожалению нет принтера, не могу проверить, но давайте попробуем так:
Sub soglashenie()
    Dim i&
        For i = Range("'форма'!j10") - 1 To Range("'форма'!k10") - 1
            i = i + 1
                Range("'sog'!C2") = i
                Sheets("sog").PrintOut
        Next i
End Sub
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

krilovsky68

#26
Скажите пожалуйста, а для возврата на страницу форма строка
Sheets("форма").Selectне требуется?
и еще в вашем варианте отсутствует
Dim i As Long
     Dim С As Long
     Dim ПО As Long
   
С = Sheets("форма").Range("J10")
ПО = Sheets("форма").Range("K10")
первая часть точно, а вторая как я понял компенсирована строкой
For i = Range("'форма'!j10") - 1 To Range("'форма'!k10") - 1завтра попробую проверить на принтере***.
*** полагал, что можно сделать так, что бы результат печати сохранялся в файл. грубо говоря, после строки Sheets("sog").PrintOut написать что то типа сохранить в пдф. да, без принтера тяжело проверить.

в любом случае спасибо за желание помочь. всегда буду рад помочь по своей деятельности.

Serge 007

Цитата: krilovsky68 от 20.06.2023, 18:41для возврата на страницу форма
Если файл открыть на листе "форма", то возврат не понадобится
Если же необходим принудительный возврат, то да, в код перед End Sub можно добавить строку Sheets("форма").Activate
Цитата: krilovsky68 от 20.06.2023, 18:41в вашем варианте отсутствует
Нет смысла объявлять переменные, если используешь их всего один раз
Вот я и не стал :)

Цитата: krilovsky68 от 20.06.2023, 18:41можно сделать так, что бы результат печати сохранялся в файл
Можно, конечно
Но это уже другая тема, не имеющая отношения к текущей
Если надо - создайте новую

Цитата: krilovsky68 от 20.06.2023, 18:41всегда буду рад помочь по своей деятельности
Спасибо за предложение, может быть и обращусь  ;)





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

krilovsky68

Сергей, все работает.
скажите пожалуйста, а когда несколько принтеров, возможно ли в код макроса внести строку, что бы была возможность при печати  выбрать принтер?



krilovsky68

Цитата: Serge 007 от 21.06.2023, 09:10Спасибо за предложение, может быть и обращусь  ;)
лучше мы к вам.

Еще небольшой вопрос: если печатается на листе 1|1 2|2, следующий 3|3 4|4, то возможно ли сделать так что бы на первом листе печатался 1|1 3|3, 2|2 4|4, что бы разрезать посередине и потом просто складывать. сумбурно написано...
в общем это бланки которые печатаются с нумерацией. Потом лист режется пополам и сшивается.

в общем вопрос с выбором принтера более актуальный.