[Excel] PDF-Datei generieren - nach Datum Von - Bis...
#1
Moin, 19 

wie generiere ich eine PDF-Datei, bei der vorher nach Datum "Von Bis" - Angabe in Zellen - "gefiltert" werden soll: 21
Funktioniert erst in Excelversionen welche die Filter-Funktion kennen. Exclamation

Würde auch in alten Excelversionen laufen, wenn man die Formeln mit  Index, Vergleich, Aggregat aufbaut.

Code:
Option Explicit
'###################################################################################################
' Module    : Modul1
' Procedure : Main
' Author    : Case (Ralf Stolzenburg)
' Date      : 22.08.2023
' Purpose   : Bestimmte Zeilen sollen als PDF-Datei gespeichert werden
' Purpose   : Auswahl nach Datum - im Beispiel Von, Bis die Zellen H1 und H2
' Note      : Lauffähig nur in Excelversionen welche die Filter-Funktion beinhalten -  siehe...
' Note      :      <br/>[i]Dateiupload bitte im Forum! So geht es:<a href="thread-326.html"> Klick mich!</a>[/i]<br/>
' Purpose   : Veröffentlicht auf CEF "https://www.clever-excel-forum.de/index.php" am 22.08.2023
' Purpose   : In der Rubrik "Beispiele und Workshops" unter "mit VBA"
'###################################################################################################
Public Sub Main()
    ' Wenn ein Fehler auftritt gehe zu der angegebenen Sprungmarke
    On Error GoTo Fin
    ' Mit With beziehe ich mich auf ein bestimmtes Objekt - hier Tabelle2
    ' Tabelle2 ist der Codename des Tabellenblattes. Im VBA-Editor der Name VOR der Klammer
    ' Alles was sich auf dieses Objekt bezieht muss mit einem Punkt beginnen
    ' Das Objekt selber muss nicht mehr genannt werden
    With Tabelle2
        ' Immer, wenn man etwas mit dem "PageSetup" machen möchte, sollte man die
        ' "PrintCommunication" ausschalten, da die Kommunikation mit dem Drucker eine Bremse ist
        Application.PrintCommunication = False
        ' Frage - sollen die Gitternetzlinien gedruckt werden oder nicht...
        Select Case MsgBox("Sollen die Gitternetzlinien gedruckt werden?", _
            vbYesNo Or vbQuestion, "Gitternetzlinien!")
            Case vbYes
                .PageSetup.PrintGridlines = True
            Case vbNo
                .PageSetup.PrintGridlines = False
            End Select
        ' Zeile 1 und 2 werden als Überschrift auf jede Seite übernommen
        ' Siehe Seintenlayout - Seite einrichten - Drucktitel - Wiederholungszeilen oben
        ' Wenn das fest eingestellt ist, braucht man diese Codezeile nicht
        .PageSetup.PrintTitleRows = "$1:$2"
        ' Und wieder einschalten
        Application.PrintCommunication = True
        ' In Tabelle2 Zelle A3 werden über die Formel "FILTER(..." nur die Werte angezeigt
        ' welche den Parametern (Datum größer gleich H1 und Datum kleiner gleich H2) entsprechen
        ' Die Formel...
        ' =FILTER(Tabelle1!A3:E458;(Tabelle1!A3:A458>=Tabelle1!H1)*(Tabelle1!A3:A458<=Tabelle1!H2);"")
        .Range("A3").Formula2 = "=FILTER(Tabelle1!A3:E458," & _
            "(Tabelle1!A3:A458>=Tabelle1!H1)*(Tabelle1!A3:A458<=Tabelle1!H2),"""")"
        ' Die so generierten Zeilen werden als PDF im TEMP-Ordner gespeichert
        ' Es wird der Name des Workbooks genommen, dann Datum und Uhrzeit mit Sekunden angehangen
        .ExportAsFixedFormat 0, Environ("TEMP") & Application.PathSeparator & _
            Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".") - 1)) & _
            Format(Now, "_dd_mm_yyyy_hh_mm_ss")
        ' Die Druckvorschaulinien werden ausgeblendet
        .DisplayAutomaticPageBreaks = False
    End With
    ' Der Ordner "TEMP" wird maximiert angezeigt. Ist er schon offen, wird noch ein Fenster geöffnet
    Shell "Explorer.exe " & Environ("TEMP"), vbMaximizedFocus
Fin:
    ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung
    If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & " " & Err.Description
End Sub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste