Arbeiten am Computer ist wie U-Boot-Fahren – wenn man das Fenster aufmacht, fangen die Probleme an.

Hallo Rene,

ChatGPT nervt…

Versuche gerade Folgendes,

Ausdruck eines gefilterten Tabellenblattes durchführen mit folgenden Bedingungen:

Seitenumbrüchen aus den rausgefilterten (ausgeblendeten) Zeilen entfernen, Ausdruck starten, im Anschluss Seitenumbruch an den gleichen Stellen wieder einfügen.

Alternativ: Seitenumbrüche der rausgefilterten (ausgeblendeten) Zeilen ignorieren (nicht löschen, bei nächster Filterung könnten ja entsprechende Seite eingeblendet sein…).

Hintergrund: ohne Makro werden leere Seiten durch die vorhandenen Seitenumbrüche generiert.

Ich habe schon mal ChatGPT befragt, da meine VBA Kenntnisse hierfür nicht ausreichen, dieser hat mir folgenden Code vorgeschlagen:

Sub PrintWithoutPageBreaks()

    Dim ws As Worksheet

    Dim lastRow As Long

    Dim rng As Range

    Dim i As Long

    Dim pageBreaks As New Collection

    Dim pageBreak As Range

    ‚ Set worksheet to active worksheet

    Set ws = ActiveSheet

    ‚ Find last row of used range

    lastRow = ws.UsedRange.Rows.Count + ws.UsedRange.row – 1

    ‚ Loop through each row in used range

    For i = 1 To lastRow

        ‚ Check if row is hidden

        If ws.Rows(i).Hidden = True Then

            ‚ If row is hidden, remove page break

            If ws.Rows(i).pageBreak <> xlPageBreakNone Then

                Set rng = ws.Rows(i).pageBreaks(1)

                pageBreaks.Add rng

                rng.Delete

            End If

        End If

Next i

    ‚ Print worksheet without page breaks

    ws.PrintOut Preview:=False

    ‚ Restore page breaks to hidden rows

    For Each pageBreak In pageBreaks

        pageBreak.EntireRow.pageBreak = pageBreak.Address

    Next pageBreak

End Sub

Gruß

Christian

####

Hallo Christian,

ja – ich habe einige Versuche mit ChatGPT gestartet. Das Problem: bekannte Dinge weiß er auch; mir unbekannte Probleme kennt er auch nicht und liefert falsche Lösungen … Also googeln …

Die Fehler:

* nicht die Zeile hat einen Umbruch, sondern das Blatt

* die Eigenschaft heißt  HPageBreaks (mit «H» am Anfang)

* ich darf nicht alle Zellen durchlaufen und prüfen, ob eine Zelle/Zeile einen Umbruch hat (und ausgeblendet ist), sondern ich muss die Liste der Umbrüche durchlaufen und prüfen, ob die Zelle/Zeile ausgeblendet ist.

* man muss die Liste der ausgeblendeten Zellen «einsammeln» – gerne in der Collection, wie ChatGPT vorschlägt, aber man muss es tun. (in meinem Beispiel sammle ich sie in einem Textstring ein, getrennt mit «|» – so «sehe» ich die Liste besser.

ChatGPT muss noch viel lernen! Von uns?

Dieser Code funktioniert. Zum Test: Das Teilchen fragt, ob du drucken willst. Wenn du «nein» anklickst, stoppt es und du kannst kontrollieren. Bei «ja» erfolgt Ausdruck und die Umbrüche werden danach eingeschaltet.

Wenn du die Zeile «Exit sub» löschst, werden die Umbrüche gelöscht und dann wieder gesetzt (zur Kontrolle).

Sub PrintWithoutPageBreaks_Rene()

    Dim ws As Worksheet

    Dim lngAnzahlUmbrueche  As Long

    Dim strUmbrueche As String

    Dim strUmbruchsadresse As String

    Dim i As Long

    ‚ Set worksheet to active worksheet

    Set ws = ActiveSheet

    ‚ ermittle die Anzahl der Umbrüche:

    lngAnzahlUmbrueche = ws.HPageBreaks.Count

    ‚ Loop through each pagebreak

    For i = lngAnzahlUmbrueche To 1 Step -1

        ‚ falls ausgeblendet

        If ws.Range(ws.HPageBreaks(i).Location.Address).RowHeight = 0 Then

            ‚ merke die Adresse des Umbruchs, beispielseise $A$17

            strUmbrueche = strUmbrueche & „|“ & ws.HPageBreaks(i).Location.Address

            ‚ lösche Umbruch

           ws.HPageBreaks(i).Delete

        End If

    Next

    ‚ drucke

    If MsgBox(„Soll jetzt gedruckt werden?“, vbInformation + vbYesNo) = vbYes Then

        ws.PrintOut

    Else

        Exit Sub

    End If

    ‚ falls Umbrüche gelöscht wurden

    If strUmbrueche <> „“ Then

        For i = 1 To UBound(Split(strUmbrueche, „|“))

            strUmbruchsadresse = Split(strUmbrueche, „|“)(i)

            ‚ Umbruch einfügen

            ws.HPageBreaks.Add Before:=ws.Range(strUmbruchsadresse)

        Next

    End If

End Sub

Liebe Grüße

Rene

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.