Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1840to1844
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Nach Spalte filtern und PDFs exportieren

Nach Spalte filtern und PDFs exportieren
22.07.2021 10:08:50
Sven
Hallo zusammen,
ich möchte gerne über ein Macro meine Tabelle nach Spalte H filtern (bei insg. ca. 100 Zeilen stehen dort 3-10 unterschiedliche 10-stellige Zahlen) und jeweils ein PDF im gleichen Ordner wie die Datei liegt (können unterschiedliche Speicherorte sein!) exportieren lassen.
Der Dateiname des PDFs soll wie in Spalte A1 sein, ergänzt um die 10-stellige Zahl der Spalte H (wäre dann jeweils H3).
Bei anderen Tabellen habe ich bereits zwei verschiedene Macros im Einsatz, jedoch sind die dermaßen verbaut, dass ich gerne neu und sauber anfangen würde.
Im Vorfeld besten Dank!

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nach Spalte filtern und PDFs exportieren
22.07.2021 11:49:44
migre
Hallo!
Blattbereich nach allen einzigartigen Werten in Spalte H:H filtern und das jeweilige Filter-Ergebnis als PDF am Speicherort der Exceldatei ablegen, Dateiname zusammengesetzt aus A1 + Filterkriterium:

Sub FilterNachSpaltePdfAusgabe()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets(1)
Dim r As Range, c As Range
Dim dicFilter As Object: Set dicFilter = CreateObject("Scripting.Dictionary")
Dim k As Variant, clc
With Application
clc = .Calculation: .Calculation = xlCalculationManual: .ScreenUpdating = False
End With
With Ws
Set r = .Range("A1:H" & .Cells(.Rows.Count, 8).End(xlUp).Row)
If .AutoFilterMode Then .AutoFilterMode = False
For Each c In r.Offset(1, 7).Resize(r.Rows.Count - 1, 1)
If Not dicFilter.exists(c.Value) Then dicFilter.Add c.Value, c.Value
Next c
For Each k In dicFilter.keys
Ws.AutoFilterMode = False
r.AutoFilter field:=8, Criteria1:=k
Ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=Wb.Path & "\" & Ws.Range("A1").Text & k & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
From:=1, _
OpenAfterPublish:=False
Next k
.AutoFilterMode = False
End With
With Application
.Calculation = clc: .ScreenUpdating = False
End With
Set Wb = Nothing: Set Ws = Nothing: Set c = Nothing
Set r = Nothing: Set c = Nothing: Set dicFilter = Nothing
End Sub
Bsp-Datei: https://www.herber.de/bbs/user/147249.xlsm
Viel Spaß ;-), LG Michael
Anzeige
AW: Nach Spalte filtern und PDFs exportieren
22.07.2021 12:43:02
Sven
Hallo Michael,
vielen Dank für die schnelle Rückmeldung.
Wenn ich es am MAC ausführe, erhalte ich die Fehlermeldung "Laufzeitfehler "429": Objekterstellugn durch ActiveX-Kompente nicht möglich" und verweist auf
Set dicFilter = CreateObject("Scripting.Dictionary")
Am PC hingegen kommt er einen Schritt weiter, hängt dann aber mit der Meldung "Laufzeitfehler "1004": Anwendungs- oder Objektdefinierter Fehler" am Punkt
For Each c In r.Offset(1, 7).Resize(r.Rows.Count - 1, 1)
Hast Du eine Idee?
AW: Nach Spalte filtern und PDFs exportieren
22.07.2021 13:06:25
migre
Hallo!
am MAC ausführe, erhalte ich die Fehlermeldung "Laufzeitfehler "429"
Ich arbeite ausschließlich in einer Windows-Umgebung und kann dazu weder testen noch Aussagen treffen.
Am PC hingegen kommt er einen Schritt weiter, hängt dann aber mit der Meldung "Laufzeitfehler "1004":
Schon möglich, aber nicht nachvollziehbar, wenn Du den o.a. Code mit der oben verlinkten Bsp-Mappe testest; das funktioniert einwandrei.
Wenn Du den o.a. Code aber in Deiner originalen, produktiven Datei unangepasst einsetzt, kann es uU zu Fehlern kommen (bspw. weil Dein Datenbereich nicht in A1 beginnt etc.) - diese Datei kenne ich aber nicht und kann daher nicht entsprechend testen/anpassen.
LG Michael
Anzeige
AW: Nach Spalte filtern und PDFs exportieren
22.07.2021 13:35:38
Sven
Hallo Michael,
durch durch "herumprobieren" habe ich den Fehler bzw. das Problem schlussendlich gefunden: in meiner Tabelle sind drei Blätter, um das es geht ist das zweite Blatt. Das mag Dein Macro anscheinend nicht. Wenn ich das Blatt an die erste Stelle verschiebe, funktioniert es!
Ich habe aber noch eine Frage: wie bzw. wo muss ich das Makro ändern, falls in A1 der gewünschte Teil des Dateinamens steht, die Filter jedoch erst in Zeile 3 (und nicht Zeile 1) beginnen?
AW: Nach Spalte filtern und PDFs exportieren
22.07.2021 13:52:02
Sven
Hat sich erledigt, danke Dir!!!
Wir brauchen IMMER genaue Angaben...
22.07.2021 14:03:35
migre
Hallo,
zu den konkreten Verhältnissen Deiner Arbeitsmappe etc., wenn Code, den wir hier liefern, auch 1:1 sofort bei Dir laufen soll. Ansonsten bekommst Du eben ein Schema oder Beispiel, dass dann eben noch angepasst werden muss. In diesem Fall bezieht sich mein Code immer auf Tabellenblatt 1, wie von Dir richtig herausgefunden; ich kann ja nicht wissen, wieviele Tabellenblätter Du in Deiner Mappe hast. Wenn ich das also VORHER weiß, weil Du vollständige Angaben machst, oder noch besser, gleich selbst eine Bsp-Datei hochlädst, dann setze ich dies auch gleich im Code um.
Wenn Du Deine Reihenfolge beibehalten willst kannst Du im Code das betreffende Blatt auch mit seinem Blattnamen ansprechen, anstelle der Position in der Mappe:

Dim Ws As Worksheet: Set Ws = Wb.Worksheets("DeinBlattName")
Zu Deiner 2. Frage: Der Wert aus A1 ist ja im Code für den Dateinamen direkt gesetzt, das kann daher beibehalten werden

Filename:=Wb.Path & "\" & Ws.Range("A1").Text & k & ".pdf"
Bzgl. des Filters musst Du nur die Bereichsangabe anpassen von

Set r = .Range("A1:H" & .Cells(.Rows.Count, 8).End(xlUp).Row)
hier also A1:Hx, wobei x die letzte gefüllte Zelle in H:H darstellt
auf

Set r = .Range("A3:H" & .Cells(.Rows.Count, 8).End(xlUp).Row)
dann wird von einem Bereich A3:Hx ausgegangen, wobei x wieder die letzte gefüllte Zelle in H:H darstellt.
Ich gehe (siehe mein Bsp.) auch grds. davon aus, dass Dein Bereich 8 Spalten umfasst (A:H), wenn dem nicht so ist, Du also zB nur in D3:Hx Daten hast, dann müsstest Du auch hier entsprechenden anpassen:
statt bspw.

For Each c In r.Offset(1, 7).Resize(r.Rows.Count - 1, 1)
auf

For Each c In r.Offset(1, 4).Resize(r.Rows.Count - 1, 1)
Klar ;-)?
LG Michael
Anzeige
AW: Wir brauchen IMMER genaue Angaben...
23.07.2021 09:15:22
Sven
Danke Dir!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige