2016-12-30 9 views
5

Извинения за любые ошибки форматирования в сообщении, но это первый раз, когда я использовал сайт, и я не совсем понимаю инструкции форматирования fquestion.Excel - Экспорт нескольких листов в .pdf через код VBA

Я видел этот вопрос на борту, но это не совсем ответ на мой вопрос, но это может быть полезным для всех, кто хочет помочь - excel vba not exporting pagesetup to pdf correctly

Я имею точно такую ​​же проблему указанных диапазонов в каждом лист не экспортируются при использовании кода для создания вывода .pdf. То, что экспортируется, - это все, что есть на каждом листе, так что каждый рабочий лист распространяется на 2 или более страниц. Диапазоны печати для каждого листа настроены для печати указанной области на 1 лист.

Я попытался адаптировать код по ссылке выше, но он не работает с несколькими листами.

код Я пытаюсь использовать в неприспособленной форме ниже

Sub ClientPDFOutput() 

If Sheets("File Data").Range("FD_FileName") = "" Then 
' MsgBox ("Save the file before exporting to a .pdf fomrat"), vbInformation, "Save File" 

' Exit Sub 
    Else 
End If 

ActiveSheet.Unprotect Password:=strPassword 

Range("UI_Status") = "Creating client PDF output - Please wait" 

SelectSheets 

Application.ScreenUpdating = False 

Sheets(arrSheets).Select 

strFilename = "Test" 

Selection.ExportAsFixedFormat _ 
    Type:=xlTypePDF, _ 
    filename:=ActiveWorkbook.Path & "\" & strFilename & ".pdf", _ 
    Quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, _ 
    IgnorePrintAreas:=True, _ 
    OpenAfterPublish:=False 

Sheets("User Input").Select 

Range("UI_Status") = "Client .pdf output created and saved" 

ActiveSheet.Protect Password:=strPassword 

Application.ScreenUpdating = True 

MsgBox ("The client output in .pdf format has been created and saved"), vbInformation, ".pdf Created" 

End Sub 

И

Sub SelectSheets() 

Dim rngSheets As Range 

Set rngSheets = Sheets("File Data").Range("D_OutputSheets") 

If rngSheets.Count = 1 Then 
    arrSheets = rngSheets.Value2 
    Else 
    arrSheets = Application.Transpose(rngSheets.Value2) 
End If 

End Sub 

ТИА

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

Я также добавил в некоторый код, чтобы выбрать диапазон печати каждого листа, прежде чем все они будут выбраны как часть массива листов, но диапазон печати в 1-м листе массива дублируется по всему листу ... поэтому, если диапазон в листе 1 является диапазоном B4: P61 и листа 2, это B4: M48, на листе 2 выбран B4: P61, когда выбран массив листов.

Затем выдает выбранные диапазоны, которые соответствуют листу 1, но не соответствуют остальным листам.

Когда я делаю это вручную, выбирая все листы, «Файл», «Экспорт», все диапазоны печати листов экспортируются, поэтому, когда это записывается и помещается в рутину, его игнорируют?

Благодаря

ответ

0

Пожалуйста, попробуйте изменить IgnorePrintAreas свойство.

Selection.ExportAsFixedFormat _ 
    Type:=xlTypePDF, _ 
    filename:=ActiveWorkbook.Path & "\" & strFilename & ".pdf", _ 
    Quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, _ 
    IgnorePrintAreas:=False, _ 
    OpenAfterPublish:=False 
0

Я бы посоветовал использовать следующие для обеспечения вашей настройки страницы фиксирует его на одной странице:

With ActiveSheet.PageSetup 
.FitToPagesWide = 1 
.FitToPagesTall = 1 
End With 

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

Далее я вижу, что у вас есть selection.ExportAsFixedFormat. Убедитесь, что выбранная вами область правильная или используйте фиксированные диапазоны. Вы также можете динамически определить свою самую дальнюю строку/столбец и добавить ее к переменной PrintRange. Getting the actual usedrange. IgnorePrintAreas:=False

Dim PrintRange As Range 

Set PrintRange = Range("A1:XX100") 

PrintRange.ExportAsFixedFormat Type:=xlTypePDF, _ 
           Filename:=Filename, _ 
           Quality:=xlQualityStandard, _ 
           IncludeDocProperties:=True, _ 
           IgnorePrintAreas:=False, _ 
           OpenAfterPublish:=False 
Смежные вопросы