Страницы: 1
RSS
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
Дорогие форумчане!
Подобные решения есть, но ни как не могу применить к моей задачи. Прошу помощи.
Есть у меня такие макросы для вывода на печать листов:
Код
Option Explicit
Dim PList1 As Worksheet
Dim PList2 As Worksheet

Sub Print_PList1()
    Set PList1 = ThisWorkbook.Worksheets("стр1")
    PList1.Calculate
    Application.Dialogs(xlDialogPrinterSetup).Show
    PList1.PrintOut
End Sub

Sub Print_PList2()
    Set PList2 = ThisWorkbook.Worksheets("стр2")
    PList2.Calculate
    Application.Dialogs(xlDialogPrinterSetup).Show
    PList2.PrintOut
End Sub
Хочу, подправить макрос, что бы он выводил на печать сразу оба листа. Но что бы не делал, выдаёт ошибку. По одному - работают отлично.
 
На вскидку...
Скрытый текст
Согласие есть продукт при полном непротивлении сторон
 
Спасибо большое. Но такой метод вывода на печать (все три варианта) - последовательный. Т.е. печатается одна страница, потом вторая. Если я запускаю печать в pdf например, то создаются два файла.
У меня так тоже получается разными способами.
Задача напечатать сразу два листа.
Если без макроса, то я выделяю два листа книги и кликаю Ctrl+P. У меня сразу на печать два листа. Если я вывожу печать в pdf, у меня получается один файл с двумя листами.
И вот именно такой финт, у меня не получается исполнить с помощью макроса.
Изменено: Sheriff - 03.11.2024 13:46:26
 
Ну про PDF речи не было, а про
Цитата
Sheriff написал:
У меня сразу на печать два листа
мои макросы это и делают
Почитайте ТУТ
Согласие есть продукт при полном непротивлении сторон
 
Sheriff, Доброго времени суток. Не уверен что понял вас правильно, но вот вам вариант.
Код
Option Explicit

Sub PrintAll()
    Dim i           As Long

    Dim myArr       As Variant
    myArr = Array("стр1", "стр2")

    For i = 0 To UBound(myArr)

        Dim Ws      As Worksheet
        Set Ws = ThisWorkbook.Worksheets(myArr(i))

        With Ws
            .Calculate
        End With

    Next i

    ThisWorkbook.Worksheets(myArr).Select

    Dim response    As VbMsgBoxResult
    response = MsgBox("Что вы хотите сделать с выбранными листами, сохранить как отдельный файл в формате .pdf или распечать по отдельности? ", vbQuestion + vbYesNo, "Вопрос")

    If response = vbYes Then

        ' Блок экспорта листов с двумя листами в одном PDF файле
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                ThisWorkbook.Path & "\" & Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & ".pdf", Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
                True
    Else

        ' Блок вывода листов на печать, каждый по отделности печается
        Application.Dialogs(xlDialogPrinterSetup).Show
        ThisWorkbook.Worksheets(myArr).PrintOut
    End If

    Set Ws = Nothing
    Erase myArr
End Sub
Дальше докручивайте сами. Удачи.
 
Цитата
написал:
Ну про PDF речи не было, а про
Вы меня не правильно поняли. Вариант с pdf, привёл как пример, для наглядности.
Командой:
Код
Application.Dialogs(xlDialogPrinterSetup).Show
я вызываю окно выбора принтера. И выбираю или принтер, или программу компиляции файла в формат pdf.

У меня макрос:
Код
Sub PrintAll()
    Set PList1 = ThisWorkbook.Worksheets("стр1")
    Set PList2 = ThisWorkbook.Worksheets("стр2")
    PList1.Calculate
    Application.Dialogs(xlDialogPrinterSetup).Show 'выбор принтера для печати
    PList1.PrintOut
    PList2.PrintOut
End Sub
выбирает один лист (стр1), потом второй (стр2) и выводит их по очереди на печать:
   

Вами предложенные варианты, выполняют аналогичный алгоритм

А у меня задача, вывести оба листа одновременно:

Тогда при просмотре появляется сразу 2 страницы:

 И я могу хоть на принтер отправить, хоть в программу для компиляции в pdf.
Изменено: Sheriff - 03.11.2024 18:01:41
 
MikeVol, Ваш макрос очень для меня сложный оказался. Он запускает на компиляцию сразу два листа в pdf, но на при выборе принтера печатает их опять по очереди.
Вычленить объединение листов из кода, к сожалению у меня не хватает ума.  
 
Sheriff, кажется Вы забыли посмотреть ссылку из #4
 
Sheriff, По мотивам данной темы ещё один вариант.
Код
Option Explicit

Sub PrintAll_v2()
    Dim tempSheet   As Worksheet
    Set tempSheet = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))

    ThisWorkbook.Worksheets("стр1").UsedRange.Copy
    tempSheet.Range("A1").PasteSpecial xlPasteAll
    Application.CutCopyMode = False
    tempSheet.HPageBreaks.Add Before:=tempSheet.Rows(ThisWorkbook.Worksheets("стр1").UsedRange.Rows.Count + 1)

    ThisWorkbook.Worksheets("стр2").UsedRange.Copy
    tempSheet.Range("A" & ThisWorkbook.Worksheets("стр1").UsedRange.Rows.Count + 1).PasteSpecial xlPasteAll
    tempSheet.Cells.Columns.AutoFit
    Application.CutCopyMode = False

    With tempSheet.PageSetup
        .PaperSize = xlPaperA4
        .Orientation = xlPortrait
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With

    tempSheet.PrintOut
    '    tempSheet.PrintPreview

    Application.DisplayAlerts = False
    tempSheet.Delete
    Application.DisplayAlerts = True

    Set tempSheet = Nothing
End Sub
Надеюсь это то что вы ищите.
 
nilske, Нет, не забыл. Статья «Как распечатать несколько листов Excel в одном файле PDF с помощью VBA (методы 6)». Но мне не нужно печатать в pdf. Ещё раз говорю, я привёл данный пример, как показательный.  
 
MikeVol, Данный вариант выводит всё в формат pdf, не спрашивая. По умолчанию. Мне нужно, выделить два листа и запустить на печать... Каким принтером не важно. Октыться должен просмотрщик и печать.
 
Sheriff, Я вот в последнее время поражаюсь с людей, неужели всё так плохо? А по экспериментировать, включить свой мозг наконец-то  не вариант или только копи-паст? Специально в коде вставил блок из 2-х строк рядом, одна не закомментирована а вторая рядом закомментирована... Или вас с ложки кормить надо?
 
MikeVol, Спасибо. Но с данным методом что то не так. Он мне 2 страницы - на 28 страниц разбил, как Бог на душу ему положил. Воедино не собрать.
Не получится, буду по одной странице выводить на печать.

Я с формулами работаю хорошо. Не супер профессионал конечно, но для меня более чем достаточно, а вот vba -полный лес, хоть и пытаюсь иной раз код какой нибудь применить у себя.

Так что, не обессудьте.
Изменено: Sheriff - 04.11.2024 00:14:28
 
Sheriff, Я создал файл с тремя листами. Первые два листа заполнил случайными данными, не помню точные диапазоны так как компьютер не под рукой. Вставил свой второй код из данной темы, разкомментировал вторую строку а первую строку (да, в том блоке) закомментировал. Запустил макрос, выскочило окно предварительного просмотра перед печатью (не помню как оно точно называется). В этом окне увидел как на вашем скрине что на печать выведутся два (2) листа, выбрал в том-же окне принтер и нажал кнопку печать. И получил на выходе два листа одним махом. Как ещё разжевать незнаю. Как смог так помог.
Страницы: 1
Наверх