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