Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 3
  • 134

Czy można drukować z Excela do PDF ze sprawdzeniem, czy na każdej stronie są przynajmniej 2-3 rzędy tabeli?

Czyli coś jak (orphan/widow control).

Moja tabela drukowana jest do pdf. Użytkownik może filtrem zaznaczyć, które pozycje tabeli powinny być zawarte w ofercie. Następnie wciska przycisk Drukuj do pdf i na ostatniej stronie drukuje się tylko nagłówek tabeli i jeden rząd.

Czy za pomocą makro można sprawdzić, czy na ostatniej stronie znajdują się przynajmniej x rzędów tabeli, a jeśli nie, za pomocą makra przesunąć podział strony w górę tak, aby znajdowało się na niej przynajmniej x rzędów.

W tej chwili przed drukowaniem użytkownik musi sprawdzić ostatnią stronę i ręcznie przesunąć podział strony, aby na ostatniej stronie mieściły się przynajmniej dwa rzędy. Moje makro wygląda w tej chwili tak:

 
Sub RowPageSetUp()
        ActiveWindow.View = xlPageBreakPreview
        

        
        With ActiveSheet.PageSetup
             .Zoom = False
             .FitToPagesWide = 1
        End With
        '------
        
' pdf Macro
    Dim Pdf_name As String
    Pdf_name = Range("E5").Value & "_" & Range("G5").Value
    Pdf_name = Replace(Pdf_name, "/", "-")


    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    Pdf_name, Quality:=xlQualityStandard, IncludeDocProperties:= _
    True, IgnorePrintAreas:=True, OpenAfterPublish:=True

    


        '------

End Sub

Z góry dziękuję za podpowiedzi.

Jacek_Kotowski
  • Zapytał
  • @ Jacek_Kotowski | 07.08.2014
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94

Odpowiedź (1)

  • 18

Jeśli mamy problem typu: wiem co chcę osiągnąć, ale nie wiem jak i dodatkowo operacja dotyczy zmian w modelu obiektowym, pomocny będzie rejestrator makr. Po nagraniu operacji przesunięcia podziału strony pojawi się podobna linia:

Set ActiveSheet.HPageBreaks(1).Location = Range("A57")

Wynika z niej, że każdy arkusz posiada kolekcję podziałów stron - wystarczy ustawić miejsce tego poziomego podziału, (w moim przykładzie jest to wiersz 57). 

Polecam przestudiowanie artykułu z MSDN dotyczącego kolekcji podziałów stron:

Artykuł

Pański problem można też rozwiązać inaczej: jeśli wiemy, że przy stałej wielkości czcionki mieści się na stronie np. 60 wierszy, to można manipulować ilością stron wydruku:

Dim wks As Worksheet
    Set wks = Worksheets("Arkusz1")
    If wks.Range("A1").CurrentRegion.Rows.Count > 60 Then
        wks.PageSetup.FitToPagesTall = 2
    Else
        wks.PageSetup.FitToPagesTall = 1
    End If
  • Odpowiedział
  • @ | 25.08.2014
  • TRENER ALTKOM AKADEMII