22.08.2023, 12:56
Moin,
wie generiere ich eine PDF-Datei, bei der vorher nach Datum "Von Bis" - Angabe in Zellen - "gefiltert" werden soll:
Funktioniert erst in Excelversionen welche die Filter-Funktion kennen.
Würde auch in alten Excelversionen laufen, wenn man die Formeln mit Index, Vergleich, Aggregat aufbaut.
wie generiere ich eine PDF-Datei, bei der vorher nach Datum "Von Bis" - Angabe in Zellen - "gefiltert" werden soll:
Funktioniert erst in Excelversionen welche die Filter-Funktion kennen.
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