Dieses Codebeispiel zeigt wie Sie die PDF Erzeugung mit einem Microsoft Excel Macro heraus automatisieren können. Voraussetzung für dieses Codebeispiel ist, dass 7-PDF Printer als Standarddrucker definiert wurde!

Sie sehen wie Sie das COM Interface dazu verwenden um programatisch PDF Druckeinstellungen zu setzen. Das Codebeispiel zeigt Ihnen nur grundsätzlich die Vorgehensweise, aber Sie können es um eigene Funktionen erweitern und entsprechend anpassen.

Bei der recht alten Version Microsoft Office 2003 könnte es bei der Ausführung des Codebeispiels zu einem Laufzeitfehler kommen. Ist dies bei Ihnen der Fall, so steht Ihnen von Microsoft ein Patch für Office 2003 zur Verfügung. Weitere Infos inkl. Patchlink hierzu finden Sie hier...

Bei neueren Microsoft Office Versionen wie Office 365 bzw. Excel 365 etc. sollte es zu keinen Laufzeitfehlern mehr kommen, wichtig ist nur das 7-PDF Printer zuvor zum Standarddrucker gemacht wurde!

Option Explicit

Sub PrintSheetAsPDF()
    PrintSheet
End Sub

Sub PrintSheet(Optional sFileName As String = "", Optional confirmOverwrite As Boolean = True)
    Dim oPrinterSettings As Object
    Dim oPrinterUtil As Object
    Dim sFolder As String
    Dim sCurrentPrinter As String
    Dim xmldom As Object
    Dim sProgId As String
    Dim sPrintername As String
    Dim sFullPrinterName As String
    
    Rem -- ***************************************************************************
    Rem -- IMPORTANT: 7-PDF Printer has to be the default printer for the example to work
    Rem -- ***************************************************************************
    
    Rem -- Documentation of the used COM interface is available at the link below.
    Rem -- https://www.7-pdf.de/sites/default/files/guide/dotnet/chm/html/T_pdf7_PdfWriter_PdfSettings.htm
    
    Rem -- Create the objects to control the printer settings.
    
    Set oPrinterSettings = CreateObject("pdf7.PdfSettings")
    Set oPrinterUtil = CreateObject("pdf7.PdfUtil")
    
    Rem -- Get default printer name
    sPrintername = oPrinterUtil.DefaultPrintername
    oPrinterSettings.Printername = sPrintername
        
    Rem -- Prompt the user for a file name
    sFolder = Environ("USERPROFILE") & "\Desktop\"
    If sFileName = "" Then
        sFileName = InputBox("Save PDF to desktop as:", "Sheet '" & _
            ActiveSheet.Name & "' to PDF...", ActiveSheet.Name)
                
        Rem -- Abort the process if the user cancels the dialog
        If sFileName = "" Then Exit Sub
        
        sFileName = sFolder & sFileName
    End If
        
    Rem -- Make sure that the file name ends with .pdf
    If LCase(Right(sFileName, 4)) <> ".pdf" Then
        sFileName = sFileName & ".pdf"
    End If
    
    Rem -- Write the settings to the printer
    Rem -- Settings are written to the runonce.ini
    Rem -- This file is deleted immediately after being used.
    
    With oPrinterSettings
        .SetValue "Output", sFileName
        If confirmOverwrite Then
            .SetValue "ConfirmOverwrite", "yes"
        Else
            .SetValue "ConfirmOverwrite", "no"
        End If
        .SetValue "ShowSettings", "never"
        .SetValue "ShowPDF", "yes"
        .WriteSettings True
    End With
    
    Rem -- Print the active work sheet
    ActiveSheet.PrintOut
    
End Sub

Downloads

Anhang Größe
Codebeispiel herunterladen 16.24 KB

Top