Microsoft Excel

Herbers Excel/VBA-Archiv

VBA

Betrifft: VBA von: Dome
Geschrieben am: 29.01.2020 10:16:16

Hallo Leute,

Ich exportiere aus einem Workbook mehrere Worksheets in einzelne PDFs. Das funktioniert so weit so gut, siehe Code:

Sub pdf_erstellen_III() 'Alle, aber einzelne PDFs
    Dim i As Integer
    For i = 2 To Worksheets.Count
        With Worksheets(i).PageSetup
            .PrintArea = "Worksheets(i).Name!$A$1:$C$50;Worksheets(i).Name!$E$1:$G$50; _
Worksheets(i).Name!$I$1:$K$50;Worksheets(i).Name!$M$1:$O$50"
        End With
        Worksheets(i).ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=ActiveWorkbook.Path & "\" & Worksheets(i).Name, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    Next
End Sub
Nun würde ich gerne die PrintArea dynamisch gestalten, und zwar habe ich dazu in der 1. Mappe (welche nicht exportiert wird) eine Range "B10:C12" (in Spalte B stehen die Mappen-Namen, in Spalte C die Druckbereiche, z.B. $A$1:$C$50;$E$1:$G$50) definiert.

SOLL: Code geht Mappe für Mappe durch, sucht den Namen innerhalb der Range und nimmt den entsprechenden Druckbereich und erstellt das PDF.

Kann man das allenfalls mit Intersect und Offset lösen?

Besten Dank für Eure Feedbacks.

LG
Dome

Betrifft: VBA Dynamische PrintArea
von: Dome
Geschrieben am: 29.01.2020 10:17:12

sorry für den nichts sagenden Betreff....

Betrifft: Ergänzung (funktionierender Code)
von: Dome
Geschrieben am: 29.01.2020 10:34:50

Dieser Code funktioniert, allerdings ist der Druckbereich eben statisch:
Sub pdf_erstellen_III() 'Alle, aber einzelne PDFs
    Dim i As Integer, Druckbereich As String
    Druckbereich = "$A$1:$C$50;$E$1:$G$50;$I$1:$K$50;$M$1:$O$50"
    For i = 2 To Worksheets.Count
        With Worksheets(i).PageSetup
            .PrintArea = Replace(Druckbereich, ";", ",")
        End With
        Worksheets(i).ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=ActiveWorkbook.Path & "\" & Worksheets(i).Name, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    Next
End Sub


Betrifft: Gelöst
von: Dome
Geschrieben am: 29.01.2020 10:49:00

Habs hinbekommen:
Sub pdf_erstellen_III() 'Alle, aber einzelne PDFs
    Dim i As Integer
    Dim RNG As Range
    Dim Zeile As Long
    Dim Druckbereich As String
    
    For i = 2 To Worksheets.Count
    
        With Worksheets(i)
            Set RNG = Columns(2)
            Zeile = WorksheetFunction.Match(Worksheets(i).Name, RNG, 0)
            Druckbereich = Intersect(RNG.Offset(, 1), Rows(Zeile))
            .PageSetup.PrintArea = Replace(Druckbereich, ";", ",")
        End With
        
        Worksheets(i).ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=ActiveWorkbook.Path & "\" & Worksheets(i).Name, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    Next
End Sub


Betrifft: Nur Worksheets in Range verwenden
von: Dome
Geschrieben am: 29.01.2020 15:22:51

Hallo Leute,

Nun ist doch noch ein Problem aufgetaucht..

Ich möchte, dass nur von den Worksheets im Range "B10" ein PDF erstellt wird und die restlichen übersprungen werden.

Habt Ihr eine Idee wie ich dies erreichen kann?

Besten Dank für Eure Inputs?

LG
Dome

Betrifft: Ergänzung: Range("B10:B20")
von: Dome
Geschrieben am: 29.01.2020 15:24:27



Betrifft: Hat niemand eine Idee?
von: Dome
Geschrieben am: 31.01.2020 07:04:52