Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вывод на печать листов книги по условию - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод на печать листов книги по условию (Макросы/Sub)
Вывод на печать листов книги по условию
lump1ck Дата: Суббота, 19.12.2020, 13:11 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

2016
Здравствуйте!
Начинающий пользователь VBA, увы, самоучка ((
Прошу помощи

Задача:
Циклично обходить определённые листы книги, анализировать в нужном диапазоне листа наличие данных и если данные есть, выделять их в область печати
Дальше нужно на листах, в которых есть данные, т.е. условие наличие данных положительное - экспортировать их в PDF
И ладно, если бы нужно было экспортировать каждый лист по отдельности - проблем нет
А мне нужно экспортировать их в один файл

И я вот вымучал только такой код
Тут происходит экспорт каждого листа с положительным выполнением условия в PDF

[vba]
Код
Sub PrintToPDF()

    'Указываем количество листов от и до
    For i = 1 To 5
    
        'Активируем первый лист в цикле
        Worksheets("M" & i).Activate
    
            LastRow = Cells(Rows.Count, 10).End(xlUp).Row + 1
            MsgBox LastRow
                
                If LastRow > 9 Then _
                    
                    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 31)).Address
                    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF
                    
                Else
                
                    ActiveSheet.PageSetup.PrintArea = Range("A1:B1").Address
                    
                End If
    
    Next i

End Sub
[/vba]

Т.е. если данные есть на листе М1 и листе М3, М4
То мне нужно, чтобы они выводились на печать


Сообщение отредактировал lump1ck - Суббота, 19.12.2020, 13:12
 
Ответить
СообщениеЗдравствуйте!
Начинающий пользователь VBA, увы, самоучка ((
Прошу помощи

Задача:
Циклично обходить определённые листы книги, анализировать в нужном диапазоне листа наличие данных и если данные есть, выделять их в область печати
Дальше нужно на листах, в которых есть данные, т.е. условие наличие данных положительное - экспортировать их в PDF
И ладно, если бы нужно было экспортировать каждый лист по отдельности - проблем нет
А мне нужно экспортировать их в один файл

И я вот вымучал только такой код
Тут происходит экспорт каждого листа с положительным выполнением условия в PDF

[vba]
Код
Sub PrintToPDF()

    'Указываем количество листов от и до
    For i = 1 To 5
    
        'Активируем первый лист в цикле
        Worksheets("M" & i).Activate
    
            LastRow = Cells(Rows.Count, 10).End(xlUp).Row + 1
            MsgBox LastRow
                
                If LastRow > 9 Then _
                    
                    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 31)).Address
                    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF
                    
                Else
                
                    ActiveSheet.PageSetup.PrintArea = Range("A1:B1").Address
                    
                End If
    
    Next i

End Sub
[/vba]

Т.е. если данные есть на листе М1 и листе М3, М4
То мне нужно, чтобы они выводились на печать

Автор - lump1ck
Дата добавления - 19.12.2020 в 13:11
bmv98rus Дата: Суббота, 19.12.2020, 21:02 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
Если, не объединять на одном листе информацию с нескольких, то каждый лист, расценивается как отдельная задача на печать и будет каждый раз новый файл. Альтернативой может быть только использование внешних утилит по объединению файлов PDF в один, но это не стандартные утилиты для Windows.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеЕсли, не объединять на одном листе информацию с нескольких, то каждый лист, расценивается как отдельная задача на печать и будет каждый раз новый файл. Альтернативой может быть только использование внешних утилит по объединению файлов PDF в один, но это не стандартные утилиты для Windows.

Автор - bmv98rus
Дата добавления - 19.12.2020 в 21:02
RAN Дата: Суббота, 19.12.2020, 21:50 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Мишка, Мишка, врет твоя сберкнижка!
[vba]
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\A\Documents\Книга1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМишка, Мишка, врет твоя сберкнижка!
[vba]
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\A\Documents\Книга1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub
[/vba]

Автор - RAN
Дата добавления - 19.12.2020 в 21:50
bmv98rus Дата: Суббота, 19.12.2020, 23:49 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
RAN, Андрей, а тоже самое с отдельным выборочным листами? Я про это.

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


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Суббота, 19.12.2020, 23:55
 
Ответить
СообщениеRAN, Андрей, а тоже самое с отдельным выборочным листами? Я про это.

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

Автор - bmv98rus
Дата добавления - 19.12.2020 в 23:49
RAN Дата: Воскресенье, 20.12.2020, 12:13 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Макрос2()
    Sheets(Array("Лист1", "Лист2")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\A\Documents\Книга1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= False
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub Макрос2()
    Sheets(Array("Лист1", "Лист2")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\A\Documents\Книга1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= False
End Sub
[/vba]

Автор - RAN
Дата добавления - 20.12.2020 в 12:13
bmv98rus Дата: Воскресенье, 20.12.2020, 12:29 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
RAN, спс, за то я понял что спутал. Вывод на печать или на виртуальный принтер с экспортом. С печатью так не выходит.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеRAN, спс, за то я понял что спутал. Вывод на печать или на виртуальный принтер с экспортом. С печатью так не выходит.

Автор - bmv98rus
Дата добавления - 20.12.2020 в 12:29
lump1ck Дата: Вторник, 22.12.2020, 13:40 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

2016
Мишка, Мишка, врет твоя сберкнижка!


Данный код мне известен ) т.е. как делать экспорт одного листа, я знаю

Sub Макрос2()
    Sheets(Array("Лист1", "Лист2")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\A\Documents\Книга1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= False
End Sub


Как сделать так, чтобы у меня по условию добавлялись листы в Array ?
Мне ведь нужно дать название диапазону

[vba]
Код
Set PrinToPDF = Array ?
[/vba]

И затем в этот самый Array добавлять листы, которые проходят моё условие IF

После того, когда обход всех листов завершён, я делаю экспорт этого Array выбирая его

[vba]
Код
Sub SaveBlankToPDF()

    Sheets(Array(PrintToPDF).Select
    Application.DisplayAlerts = False
    ChDrive Left(ThisWorkbook.Path, 1)
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    [BI5], Quality:= _
        xlQualityStandard,
        IncludeDocProperties:=True,
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

End Sub
[/vba]
 
Ответить
Сообщение
Мишка, Мишка, врет твоя сберкнижка!


Данный код мне известен ) т.е. как делать экспорт одного листа, я знаю

Sub Макрос2()
    Sheets(Array("Лист1", "Лист2")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\A\Documents\Книга1.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= False
End Sub


Как сделать так, чтобы у меня по условию добавлялись листы в Array ?
Мне ведь нужно дать название диапазону

[vba]
Код
Set PrinToPDF = Array ?
[/vba]

И затем в этот самый Array добавлять листы, которые проходят моё условие IF

После того, когда обход всех листов завершён, я делаю экспорт этого Array выбирая его

[vba]
Код
Sub SaveBlankToPDF()

    Sheets(Array(PrintToPDF).Select
    Application.DisplayAlerts = False
    ChDrive Left(ThisWorkbook.Path, 1)
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    [BI5], Quality:= _
        xlQualityStandard,
        IncludeDocProperties:=True,
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

End Sub
[/vba]

Автор - lump1ck
Дата добавления - 22.12.2020 в 13:40
lump1ck Дата: Вторник, 22.12.2020, 13:53 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

2016
т.е. задача вообще не тривиальная

Имеем цикл обхода нужного диапазона листов
В цикле есть условие, если в определённой ячейке есть данные, анализировать где эти данные заканчиваются и включать область с нужными данными в "область печати"

Далее нужно включить этот лист в массив (Array - я полагаю)

И так до конца цикла

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

Имеем цикл обхода нужного диапазона листов
В цикле есть условие, если в определённой ячейке есть данные, анализировать где эти данные заканчиваются и включать область с нужными данными в "область печати"

Далее нужно включить этот лист в массив (Array - я полагаю)

И так до конца цикла

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

Автор - lump1ck
Дата добавления - 22.12.2020 в 13:53
bmv98rus Дата: Вторник, 22.12.2020, 15:32 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
а так
[vba]
Код
    ReDim strSheets(Sheets.Count - 1)
    For i = 1 To 5
        With Worksheets("M" & i)
            LastRow = .Cells(.Rows.Count, 10).End(xlUp).Row + 1
            'MsgBox LastRow
            If LastRow > 9 Then
                strSheets(j) = Worksheets("M" & i).Name
                j = j + 1
                .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(LastRow, 31)).Address
            End If
        End With
    Next i
    ReDim strSheets(j - 1)
[/vba]
Только обработайте если листов подходящих нет


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениеа так
[vba]
Код
    ReDim strSheets(Sheets.Count - 1)
    For i = 1 To 5
        With Worksheets("M" & i)
            LastRow = .Cells(.Rows.Count, 10).End(xlUp).Row + 1
            'MsgBox LastRow
            If LastRow > 9 Then
                strSheets(j) = Worksheets("M" & i).Name
                j = j + 1
                .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(LastRow, 31)).Address
            End If
        End With
    Next i
    ReDim strSheets(j - 1)
[/vba]
Только обработайте если листов подходящих нет

Автор - bmv98rus
Дата добавления - 22.12.2020 в 15:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод на печать листов книги по условию (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!