Добрый день, помогите пожалуйста разобраться с макросом печати.
1) Основная необходимость - это печать по кнопке в PDF одним файлом в фиксированную папку, с заданием имени или текущей датой, перечня обозначенных листов книги, имена требуемых листов некоторым образом отбираются из некоторой таблицы и заполняют строку 2 - изображение 1
В таблице по строке 2 могут быть как пропуски, так и замены из другого диапазона имен листов (есть листы с именами от 1 до 10 и от Т1 до Т5) - изображение 2
2) Затем некоторая сводка информации со всех листов попадает на лист Ш, где требуется динамическая область печати с шагом по столбцам, в отдельный файл, также с заданием имени или текущей датой, но с припиской "_ш" (в примере до столбца G, так как далее уже нет информации) - изображение 3
Суммирую последовательность действий после нажатия на кнопку исполняющую макрос:
всплывает диалоговое окно, запрашивающее имя общего файла PDF требуемых листов под печать (или сразу автоматом ставит в имя файла текущую дату), затем печатает все обозначенные листы из строки 2 с листа "Исходник", затем динамически определяется область печати на листе "Ш" и также печатается в PDF, как предыдущий файл + приписка "_ш".
Спасибо всем, кто сможет помочь.
Добрый день, помогите пожалуйста разобраться с макросом печати.
1) Основная необходимость - это печать по кнопке в PDF одним файлом в фиксированную папку, с заданием имени или текущей датой, перечня обозначенных листов книги, имена требуемых листов некоторым образом отбираются из некоторой таблицы и заполняют строку 2 - изображение 1
В таблице по строке 2 могут быть как пропуски, так и замены из другого диапазона имен листов (есть листы с именами от 1 до 10 и от Т1 до Т5) - изображение 2
2) Затем некоторая сводка информации со всех листов попадает на лист Ш, где требуется динамическая область печати с шагом по столбцам, в отдельный файл, также с заданием имени или текущей датой, но с припиской "_ш" (в примере до столбца G, так как далее уже нет информации) - изображение 3
Суммирую последовательность действий после нажатия на кнопку исполняющую макрос:
всплывает диалоговое окно, запрашивающее имя общего файла PDF требуемых листов под печать (или сразу автоматом ставит в имя файла текущую дату), затем печатает все обозначенные листы из строки 2 с листа "Исходник", затем динамически определяется область печати на листе "Ш" и также печатается в PDF, как предыдущий файл + приписка "_ш".
Если порядок листов в файле pdf имеет значение, то можно так [vba]
Код
Public Sub ExpPDF() Dim t As Workbook, lc As Long, i As Long, k As Long, nm as String 'On Error Resume Next Set t = ThisWorkbook Application.ScreenUpdating = False With ActiveSheet lc = .Cells(2, .Columns.Count).End(xlToLeft).Column ReDim arr(1 To 1)
For i = 1 To lc If .Cells(2, i) <> "" Then k = k + 1 If k = 1 Then t.Sheets(CStr(.Cells(2, i))).Copy Else t.Sheets(CStr(.Cells(2, i))).Copy After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) End If Next i If k = 0 Then Exit Sub End With
nm = ThisWorkbook.Path & "\" & Format(Now, "DDMMYY_hhnnss") & ".pdf" ' имяфайла и путь целиком
On Error Resume Next ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nm, Quality:=xlQualityStandard _ , IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
ActiveWorkbook.Close False
With t.Sheets("Ш") i = 1 Do While .Cells(2, i) <> "" If .Cells(2, i) = 0 Then .Columns(i).Hidden = True Else .Columns(i).Hidden = False i = i + 1 Loop .ExportAsFixedFormat Type:=xlTypePDF, Filename:=nm & "_Ш", Quality:=xlQualityStandard _ , IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
.Columns.Hidden = False End With
On Error GoTo 0 Application.ScreenUpdating = True
End Sub
[/vba]
Если порядок листов в файле pdf имеет значение, то можно так [vba]
Код
Public Sub ExpPDF() Dim t As Workbook, lc As Long, i As Long, k As Long, nm as String 'On Error Resume Next Set t = ThisWorkbook Application.ScreenUpdating = False With ActiveSheet lc = .Cells(2, .Columns.Count).End(xlToLeft).Column ReDim arr(1 To 1)
For i = 1 To lc If .Cells(2, i) <> "" Then k = k + 1 If k = 1 Then t.Sheets(CStr(.Cells(2, i))).Copy Else t.Sheets(CStr(.Cells(2, i))).Copy After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) End If Next i If k = 0 Then Exit Sub End With
nm = ThisWorkbook.Path & "\" & Format(Now, "DDMMYY_hhnnss") & ".pdf" ' имяфайла и путь целиком
On Error Resume Next ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nm, Quality:=xlQualityStandard _ , IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
ActiveWorkbook.Close False
With t.Sheets("Ш") i = 1 Do While .Cells(2, i) <> "" If .Cells(2, i) = 0 Then .Columns(i).Hidden = True Else .Columns(i).Hidden = False i = i + 1 Loop .ExportAsFixedFormat Type:=xlTypePDF, Filename:=nm & "_Ш", Quality:=xlQualityStandard _ , IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
Спасибо за скорый ответ! В первом приближении, после адаптации под себя, все прекрасно работает! Изящное решение - через копирование в новую книгу.
Подскажите один момент, если мне надо сперва создавать папку с именем даты, в которую потом будут помещаться файлы PDF, так будет верно или есть решение лучше?
Спасибо за скорый ответ! В первом приближении, после адаптации под себя, все прекрасно работает! Изящное решение - через копирование в новую книгу.
Подскажите один момент, если мне надо сперва создавать папку с именем даты, в которую потом будут помещаться файлы PDF, так будет верно или есть решение лучше?