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