2013-01-18 17 views
18

Mam arkusz raportowania raportowania, który pobiera niektóre dane z bazy danych i tworzy trzy arkusze informacji podsumowujących. Chcę automatycznie uruchomić arkusz kalkulacyjny z wiersza poleceń i automatycznie zapisać wszystkie trzy arkusze raportowania jako plik (i) PDF.Zapisywanie wielu arkuszy do .pdf

Początkowo pomyślałem, że mogę mieć makro VBA na arkuszu zrobić to przez serię "print as PDF", ale to wymaga pośredniego interaktywnego okna dialogowego, aby określić nazwę pliku wyjściowego. Następnie stwierdzam, że mogę po prostu zapisać jako pdf, a makro może ustawić nazwę pliku wyjściowego. Powoduje to jednak utworzenie trzech oddzielnych plików, a następnie muszę je połączyć na zewnątrz, aby je scalić.

(To dziwne, że zapisz jako jedyny pdf oszczędza jeden arkusz, gdzie inne tryby oszczędzania wydaje się zapisać cały skoroszyt.)

Tak, istnieją narzędzia do scalania trzy pliki później, ale chcę wiedzieć jeśli istnieje prosty sposób, aby program Excel zapisał wiele arkuszy razem jako jeden plik PDF.

wydrukować teraz przez szereg rzeczy jak:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ... 

mogłem zrobić zamiast pojedynczej instrukcji coś podobnego (pseudo-kod):

ThisWorkbook.Sheets(1,2,3,4).ExportAsFixedFormat Type:=xlTypePDF, ... 

Odpowiedz

52

Start, wybierając żądane arkusze połączyć:

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

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

Perfect; dzięki! – guthrie

+0

@Tim '+ 1' to przydatny element :) – bonCodigo

+0

Możliwość wyboru tablicy arkuszy opracowanej cudownie. Dziękuję Ci. –

6

Podobny do odpowiedzi Tima - ale z czekiem na rok 2007 (gdzie PDF exp ort nie jest instalowany domyślnie):

 
Public Sub subCreatePDF() 

    If Not IsPDFLibraryInstalled Then 
     'Better show this as a userform with a proper link: 
     MsgBox "Please install the Addin to export to PDF. You can find it at http://www.microsoft.com/downloads/details.aspx?familyid=4d951911-3e7e-4ae6-b059-a2e79ed87041". 
     Exit Sub 
    End If 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ 
     Filename:=ActiveWorkbook.Path & Application.PathSeparator & _ 
     ActiveSheet.Name & " für " & Range("SelectedName").Value & ".pdf", _ 
     Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
     IgnorePrintAreas:=False, OpenAfterPublish:=True 
End Sub 

Private Function IsPDFLibraryInstalled() As Boolean 
'Credits go to Ron DeBruin (http://www.rondebruin.nl/pdf.htm) 
    IsPDFLibraryInstalled = _ 
     (Dir(Environ("commonprogramfiles") & _ 
     "\Microsoft Shared\OFFICE" & _ 
     Format(Val(Application.Version), "00") & _ 
     "\EXP_PDF.DLL") <> "") 
End Function 
+0

Dobry pomysł, dzięki! – guthrie

+0

Czy to też działa z programem Excel 2003? Mam na myśli, czy IsPDFLibraryInstalled zwróci false? – Anthony

+0

W rzeczywistości dostaję błąd składni w 2010 roku. – Anthony

2

Polecam dodając następującą linię po eksporcie do PDF:

ThisWorkbook.Sheets("Sheet1").Select 

(gdzie np. Sheet1 to pojedynczy arkusz, który chcesz później aktywować)

Pozostawienie wielu arkuszy w wybranym stanie może spowodować problemy z wykonywaniem niektórych kodów. (np. unprotect nie działa poprawnie, gdy wiele arkuszy jest aktywnie wybranych.)

-3

W Excel 2013 po prostu wybierz kilka arkuszy i zrób "Zapisz jako" i wybierz PDF jako typ pliku. Po kliknięciu przycisku Zapisz wiele stron otworzy się w formacie PDF.

+2

zażądano rozwiązania VBA, jak wyżej. – guthrie

Powiązane problemy