Gefilterte Tabelle per PDF und variabler Name

Bild

Betrifft: Gefilterte Tabelle per PDF und variabler Name
von: Thomas
Geschrieben am: 15.09.2015 14:57:38

Hallo liebe Forumsgemeinde,
wie es immer so ist. Man liest viel im Forum mit und findet oft Hilfe. Allerdings habe ich zu meinem Problem keine Lösung gefunden und daher wende ich mich heute persönlich an euch.
Problem:
Ich habe eine ziemlich große Datei welche sich nach verschiedenen Kriterien filtern lässt. Ich habe einen Code rausbekommen, welcher mir die aktuelle Ansicht als PDF ausdruckt.
Bennant werden soll die Datei u.a.nach dem Wert, der in Spalte C (nachdem ein Filter gesetzt wurde) steht. Zur Zeit ist es so, das eine feste Zeile den Namen der Tabelle vorgibt, was aber nicht gewünscht ist.
Hier mein aktueller Code:

Sub Drucke_Stellenplan()
    Const DateiPfad = "irgendein Dateipfad/"
    Dim DateiName As String
   
    DateiName = DateiPfad & Range("c1073") & " Stellenplan " & Range("G1073") & ".pdf"   ' Org + _
 _
 aktuelles Datum
    Range("c1:bh1072").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        DateiName, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
        
End Sub

Wie gesagt, die Datei wird immer nach den Werten in c1073 und g1073 benannt, soll aber nach C... und G... benannt werden, die nach dem Filtern ganz oben stehen.
Wenn jemand von euch hier eine Idee hätte würde mir das sehr weiterhelfen.
Vielen Dank und liebe Grüße,
Thomas

Bild

Betrifft: AW: Gefilterte Tabelle per PDF und variabler Name
von: Nepumuk
Geschrieben am: 15.09.2015 18:50:54
Hallo,
teste mal:

Public Sub Drucke_Stellenplan()
    
    Const DateiPfad = "irgendein Dateipfad/"
    
    Dim DateiName As String
    Dim lngRow As Long
    
    With ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
        If .Areas(1).Rows.Count > 1 Then
            lngRow = .Areas(1).Cells(2, 1).Row
        Else
            lngRow = .Areas(2).Cells(1, 1).Row
        End If
    End With
    
    DateiName = DateiPfad & Cells(lngRow, 3).Text & _
        " Stellenplan " & Cells(lngRow, 7).Text & ".pdf" ' Org + aktuelles Datum
    
    Range("C1:BH1072").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        DateiName, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=True
    
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Gefilterte Tabelle per PDF und variabler Name
von: Thomas
Geschrieben am: 16.09.2015 08:30:02
Hallo Nepumuk,
vielen Dank für deine Antwort. Leider funktioniert es nicht ganz wie es soll. Denn der Ausdruck funktioniert nur, wenn der Autofilter so gesetzt ist, dass die Zeile C3 angezeigt wird. Wähle ich im Filter bspw die nächste Kategorie, so dass die Zeile C48 ganz oben steht kommt:
Laufzeitfehler 1004
Das Dokument wurde nicht gespeichert. Das Dokument ist möglicherweise geöffnet, oder beim speichern ist ein Fehler aufgetreten.
Schaue ich mir das ganze im Debuggen an ist der Bereich gelb markiert der den Druckbereich angibt, bzw das Druckformat bestimmt. HIer finde ich allerdings keinen Fehler..?

Bild

Betrifft: AW: Gefilterte Tabelle per PDF und variabler Name
von: Thomas
Geschrieben am: 16.09.2015 09:49:21
Hallo nochmal,
ich habe es hinbekommen. Der Code sieht wie folgt aus:

Public Sub Drucke_Stellenplan()
    
    Const DateiPfad = "irgendein Dateipfad"
    
    Dim DateiName As String
    Dim lngRow As Long
    
    With ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
        If .Areas(1).Rows.Count > 1 Then
            lngRow = .Areas(1).Cells(2, 1).Row
        Else
            lngRow = .Areas(2).Cells(1, 1).Row
        End If
    End With
    Debug.Print AF_KRIT
    DateiName = DateiPfad & AF_KRIT & _
        " Stellenplan " & ".pdf" ' Org + aktuelles Datum
    
     Range("c1:bh1072").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        DateiName, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
        
        
        
    
End Sub

Public Function AF_KRIT() As String
Dim intCol As Integer
Dim intFilter As Integer
Dim rngFilter As Range
Dim strFilter As String
Dim WS As Worksheet
Application.Volatile
Set WS = ActiveSheet
If WS.FilterMode And WS.AutoFilterMode Then
    Set rngFilter = WS.AutoFilter.Range
    For intCol = 1 To rngFilter.Columns.Count
        With WS.AutoFilter.Filters(intCol)
            If .On Then
                If strFilter <> "" Then strFilter = strFilter & vbLf
                    strFilter = strFilter & rngFilter.Cells(1, intCol) & ": " & .Criteria1
                Select Case .Operator
                    Case xlAnd
                    strFilter = strFilter & " UND " & .Criteria2
                    Case xlOr
                    strFilter = strFilter & " ODER " & .Criteria2
                End Select
            End If
        End With
    Next intCol
End If
AF_KRIT = Right(strFilter, 3)
End Function
Nochmal danke für die Hilfe. Ohne die erste Antwort wäre ich nicht draufgekommen.
Gruß,
Thomas

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Gefilterte Tabelle per PDF und variabler Name"