2013-12-23 5 views
11

Я использую следующий код для экспорта выбранных листов из Excel 2010 в один файл PDF ...Excel VBA для экспорта выбранных листов в формате PDF

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select 

ActiveSheet.ExportAsFixedFormat _ 
     Type:=xlTypePDF, _ 
     Filename:="C:\temp.pdf", _ 
     Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, _ 
     IgnorePrintAreas:=False, _ 
     OpenAfterPublish:=True 

Моя проблема заключается в том, что она экспортирует только первый лист , Есть идеи?

ответ

22

После того, как вы выбрали группу листов, вы можете использовать Выбор

Рассмотрим:

Sub luxation() 
    ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select 
    Selection.ExportAsFixedFormat _ 
     Type:=xlTypePDF, _ 
     Filename:="C:\TestFolder\temp.pdf", _ 
     Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, _ 
     IgnorePrintAreas:=False, _ 
     OpenAfterPublish:=True 
End Sub 

EDIT # 1:

Дальнейшее тестирование упивался, что этот метод зависит на группе ячеек выбрано на каждом листе. Чтобы получить исчерпывающий вывод, используйте что-то вроде:

Sub Macro1() 

    Sheets("Sheet1").Activate 
    ActiveSheet.UsedRange.Select 
    Sheets("Sheet2").Activate 
    ActiveSheet.UsedRange.Select 
    Sheets("Sheet3").Activate 
    ActiveSheet.UsedRange.Select 

    ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select 
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     "C:\Users\James\Desktop\pdfmaker.pdf", Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
     True 
End Sub 
+0

Спасибо @Garys Student. У меня есть kink, помеченный PDF для разрешенного подписания. Adobe Reader предлагает возможность подписывать PDF-файлы, но, видимо, есть флаг файла PDF -> Свойства -> Безопасность, который отмечает, позволяет ли Reader подписывать ... im, угадывая, что это метод лицензирования, учитывая, что другие продукты позволяют подписывать без платного продукта. Документация, которую я нашел от Adobe и MS, была плохой. Любая помощь будет оценена по достоинству. –

+1

это только печатает чистый лист для меня. не знаете почему? – HattrickNZ

+0

Использование выбора только, кажется, экспортирует чистый лист в Excel 2013. Использование ActiveSheet, как показано в ответах ASP8811 и HattrickNZ, действительно сработало для нас. – Adrian

7

Я довольно замешан в этом. Я также работаю в Excel 2010. Я попытался экономии два листов в одном формате PDF с использованием:

ThisWorkbook.Sheets(Array(1,2)).Select 
    **Selection**.ExportAsFixedFormat xlTypePDF, FileName & ".pdf", , , False 

, но я не получил ничего, кроме пустых страниц. Он сохранил оба листа, но ничего на них. Это было не до тех пор, пока я не использовал:

ThisWorkbook.Sheets(Array(1,2)).Select 
    **ActiveSheet**.ExportAsFixedFormat xlTypePDF, FileName & ".pdf", , , False 

, что у меня есть один файл PDF с обоими листами.

Я попытался вручную сохранить эти две страницы, используя «Выбор» в диалоговом окне «Параметры», чтобы сохранить два листа, которые я выбрал, но получил пустые страницы. Когда я попробовал опцию «Активные листы», я получил то, что хотел. Когда я записал это как макрос, Excel использовал ActiveSheet, когда он успешно опубликовал PDF. Что дает?

+0

Что такое FileName, равное? может 'FileName' заключить путь? [myref] (http://msdn.microsoft.com/en-us/library/bb238907%28v=office.12%29.aspx) – HattrickNZ

+0

Теперь я получаю сообщение об ошибке с этим 'Array (1,2)' what это должно быть? его вроде бы принимает только одно имя листа? – HattrickNZ

+0

Жаль, что это после факта. Я не вошел в систему через некоторое время. Имя файла должно содержать путь к файлу, куда вы хотите сохранить, а также имя файла. – asp8811

4

это то, что я придумал, как я имел проблемы с @ asp8811 ответа (возможно, мои собственные трудности)

«это будет делать положить первые 2 листа в формате PDF » Заметь каждый WS должен быть контролируются разрывами страниц для печати, которая является немного неудобным 'это явно положило PDF в текущей директории

Sub luxation2() 
    Dim Filename As String 
    Filename = "temp201" 



Dim shtAry() 
ReDim shtAry(1) ' this is an array of length 2 
For i = 1 To 2 
shtAry(i - 1) = Sheets(i).Name 
Debug.Print Sheets(i).Name 
Next i 
Sheets(shtAry).Select 
Debug.Print ThisWorkbook.Path & "\" 


    ActiveSheet.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "/" & Filename & ".pdf", , , False 

End Sub 
+0

Шахта работает только с первыми двумя листами, потому что это то, что я собирался сделать в своем коде. Мой ответ был не ответом, а скорее разъяснением об использовании ActiveSheet вместо Selection, потому что в то время у меня не было репутации, чтобы комментировать. Ваше решение намного лучше для использования нескольких листов. – asp8811

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