2016-09-20 8 views
-1

Я записал макрос.Сохранить видимые листы в pdf, игнорировать скрытые листы

Он работает, если все листы видны, но когда я спрячу лист, он не сохранится в формате pdf.

Это код.

Sub save_pdf() 
' 
' save_pdf Macro 
' 

' 
Sheets(Array("TITLE", "CML", "CLUSTER", "ORS", "MOBILE", "YPS", "DEVICES", "PORTS")).Select 
Sheets("TITLE").Activate 
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:= _ Sheets("MAIN").Range("customer_name") + " - Project Initiation_ Document.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True,_ IgnorePrintAreas:=False, OpenAfterPublish:=True 

Sheets("MAIN").Select 

End Sub 

ответ

0

Возможно, это связано с использованием .Select. Мы хотим, чтобы по возможности было avoid using .Select. Вместо этого просто установите цикл, чтобы пройти каждый рабочий лист в вашей книге.

Sub save_PDFs() 
Dim sht As Worksheet 
For Each sht In ActiveWorkbook.Worksheets 
    sht.ExportAsFixedFormat Type:=xlTypePDF, fileName:=Sheets("MAIN").Range("customer_name") + " - Project Initiation_ Document.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 
Next sht 
End Sub 

Однако, если вы хотите только видимые листы, то сделать это:

Sub save_PDFs() 
Dim sht As Worksheet 
For Each sht In ActiveWorkbook.Worksheets 
    If sht.Visible = True Then sht.ExportAsFixedFormat Type:=xlTypePDF, fileName:=Sheets("MAIN").Range("customer_name") + " - Project Initiation_ Document.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 
Next sht 
End Sub 
+1

OP хочет экспортировать листы в один PDF - ' Для этого требуется «Выбрать». –

+0

@TimWilliams - О, правда? Это первое (что я могу вспомнить), где требуется «.Select». Почему я не могу просто добавить 'sht.Select' и заменить' sht.ExportAs ... 'на' ActiveSheet.ExportAs ... '? Это также вызывает у меня ошибку. – BruceWayne

+0

@TimWilliams - 'Workbook.ExportAsFixedFormat' пропускает скрытые листы (по крайней мере, в 2013 году). См. [Этот ответ] (https://stackoverflow.com/a/36107539/4088852). – Comintern

1

Что-то вроде этого:

Sub ExportVisible() 
    Dim shts, sht As Worksheet, s, i As Long 


    shts = Array("TITLE", "CML", "CLUSTER", "ORS", "MOBILE", "YPS", "DEVICES", "PORTS") 
    i = 0 

    For Each s In shts 
     Set sht = ActiveWorkbook.Sheets(s) 
     If sht.Visible = xlSheetVisible Then 
      i = i + 1 
      sht.Select (i = 1) '"replace" parameter true when i=1 
     End If 
    Next s 

    'Sheets("TITLE").Activate '<<EDIT: remove this 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ 
        Filename:=Sheets("MAIN").Range("customer_name").Value & _ 
        " - Project Initiation_Document.pdf ", _ 
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
        IgnorePrintAreas:=False, OpenAfterPublish:=True 

End Sub 
+0

спасибо tim, но то, что он делает, это сохранить только титульную страницу. – RHON

+0

Попробуйте прокомментировать листы («TITLE»). Активировать строку –

+0

Мне очень жаль, я действительно начинаю в этой области, что вы подразумеваете под «комментированием листок (« TITLE »). Активировать«? – RHON

Смежные вопросы