Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ein Teil eines Codes funktioniert nicht richtig

Forumthread: ein Teil eines Codes funktioniert nicht richtig

ein Teil eines Codes funktioniert nicht richtig
16.09.2024 18:15:09
Siegfried
Hallo zusammen,

ich möchte mit dem folgenden Code Daten auf eine Seite drucken und dabei die Seite voll ausnutzen.
Der Code wird über eine Schaltfläche aufgerufen.
Der Teil des Codes mit dem ich die Zeilenhöhe verändere, funktioniert aber nicht immer.
Nur bei jedem zweiten Aufruf wird die Änderung durchgeführt, ansonsten bleibt die ursprüngliche Zeilenhöhe.
Was ist zu tun?

Gruß
Siegfried

Sub Kalenderdruck_Rückserie_Hochformat_Seite6()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim n1 As Integer, AnzZeilen As Integer
Dim Zeilenhöhe As Double, Spaltenbreite As Double
Dim Spalte1 As Integer, Spalte2 As Integer
Dim Startspalte As Integer
Dim Startzelle As Range, Nachbarzelle As Range
Dim SpaltenbreiteMax As Integer
Dim AnzBelegung As Integer, Zähler As Integer
Dim angepassteHöhe As Double, angepassteBreite As Double
Dim Anpassungsfaktor As Double
Dim HöheAnpassungswert As Double, BreiteAnpassungswert As Double
Dim Bereich As Range

AnzZeilen = (31 * 5) + (6 * 5)
' DIN A4 (Höhe 844 Pixel / Breite 97 Pixel = Anpassungsfaktor 8.7)
Anpassungsfaktor = 8.7

Spalte1 = Range("Monat.Sep").Column
Spalte2 = Range("Monat.Nov").Column

Startspalte = Spalte2
Set Startzelle = Range("Tag1.Nov")
Set Nachbarzelle = Range("Tag1.Sep")

For n1 = 0 To AnzZeilen
Zeilenhöhe = Zeilenhöhe + Startzelle.Offset(n1, 0).RowHeight
Next n1
For n1 = 0 To 9
Spaltenbreite = Spaltenbreite + Startzelle.Offset(0, n1).ColumnWidth
Next n1
angepassteHöhe = Spaltenbreite * Anpassungsfaktor
angepassteBreite = Zeilenhöhe / Anpassungsfaktor

SpaltenbreiteMax = 0
If Startzelle.Offset(0, 2).ColumnWidth > SpaltenbreiteMax Then
SpaltenbreiteMax = Startzelle.Offset(0, 2).ColumnWidth
End If
If Startzelle.Offset(0, 7).ColumnWidth > SpaltenbreiteMax Then
SpaltenbreiteMax = Startzelle.Offset(0, 7).ColumnWidth
End If
AnzBelegung = 0
Zähler = 0
For n1 = 0 To AnzZeilen
' hier ist ein Termin eingetragen
If Startzelle.Offset(n1, 4).Value > "" Or _
Startzelle.Offset(n1, 9).Value > "" Then
Zähler = Zähler + 1
' stellt die Zeilenhöhe auf den Ausgangszustand
Startzelle.Offset(n1, 0).RowHeight = ZeilenhöheTermin
End If
If Nachbarzelle.Offset(n1, 4).Value > "" Or _
Nachbarzelle.Offset(n1, 9).Value > "" Then
' stellt die Zeilenhöhe auf den Ausgangszustand
Nachbarzelle.Offset(n1, 0).RowHeight = ZeilenhöheTermin
End If
Next n1
If Zähler > AnzBelegung Then
AnzBelegung = Zähler
End If

' stellt die Spaltenbreite auf den Ausgangszustand
Columns(Spalte1 + 2).AutoFit
Columns(Spalte1 + 7).AutoFit
Columns(Spalte2 + 2).AutoFit
Columns(Spalte2 + 7).AutoFit
HöheAnpassungswert = (angepassteHöhe - Zeilenhöhe) / AnzBelegung

' passt die Zeilenhöhe an
For n1 = 0 To AnzZeilen
If Startzelle.Offset(n1, 4).Value > "" Or _
Startzelle.Offset(n1, 9).Value > "" Then
Startzelle.Offset(n1, 0).RowHeight = ZeilenhöheTermin + HöheAnpassungswert
End If
Next n1
' passt die Spaltenbreite an
' Columns(Startspalte + 2).ColumnWidth = SpaltenbreiteMax
' Columns(Startspalte + 7).ColumnWidth = SpaltenbreiteMax

Set Bereich = Range("Druck_Seite6")
Bereich.Select
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
.CenterFooter = ""
.Orientation = xlPortrait
End With
Application.GoTo Reference:="Druck_Seite6"
Selection.PrintPreview
' Selection.PrintOut
' ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"
' Range("A1").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Die KI sagt....
17.09.2024 07:10:18
MCO
....

Hallo Siegfried,

Dein Problem mit der nicht immer korrekt aktualisierten Zeilenhöhe könnte an der Art und Weise liegen, wie Excel das Bildschirm-Update und die Berechnungen handhabt. Hier sind einige mögliche Ansätze, um das Problem zu beheben:

Sicherstellen, dass alle Berechnungen abgeschlossen sind: Manchmal kann es hilfreich sein, eine kleine Pause im Code einzulegen, um sicherzustellen, dass Excel alle Berechnungen abgeschlossen hat, bevor es fortfährt.

Verwendung von DoEvents: Der Befehl DoEvents gibt der Anwendung die Möglichkeit, andere Ereignisse zu verarbeiten, die möglicherweise blockiert sind. Dies kann manchmal helfen, wenn Änderungen nicht sofort wirksam werden.

Doppelte Sicherung durch manuelles Neusetzen der Zeilenhöhe: Setze die Zeilenhöhe zweimal, um sicherzustellen, dass sie korrekt aktualisiert wird.

Hier ist eine angepasste Version Deines Codes, die diese Ansätze integriert:

Sub Kalenderdruck_Rückserie_Hochformat_Seite6()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim n1 As Integer, AnzZeilen As Integer
Dim Zeilenhöhe As Double, Spaltenbreite As Double
Dim Spalte1 As Integer, Spalte2 As Integer
Dim Startspalte As Integer
Dim Startzelle As Range, Nachbarzelle As Range
Dim SpaltenbreiteMax As Integer
Dim AnzBelegung As Integer, Zähler As Integer
Dim angepassteHöhe As Double, angepassteBreite As Double
Dim Anpassungsfaktor As Double
Dim HöheAnpassungswert As Double, BreiteAnpassungswert As Double
Dim Bereich As Range

AnzZeilen = (31 * 5) + (6 * 5)
Anpassungsfaktor = 8.7

Spalte1 = Range("Monat.Sep").Column
Spalte2 = Range("Monat.Nov").Column

Startspalte = Spalte2
Set Startzelle = Range("Tag1.Nov")
Set Nachbarzelle = Range("Tag1.Sep")

For n1 = 0 To AnzZeilen
Zeilenhöhe = Zeilenhöhe + Startzelle.Offset(n1, 0).RowHeight
Next n1
For n1 = 0 To 9
Spaltenbreite = Spaltenbreite + Startzelle.Offset(0, n1).ColumnWidth
Next n1
angepassteHöhe = Spaltenbreite * Anpassungsfaktor
angepassteBreite = Zeilenhöhe / Anpassungsfaktor

SpaltenbreiteMax = 0
If Startzelle.Offset(0, 2).ColumnWidth > SpaltenbreiteMax Then
SpaltenbreiteMax = Startzelle.Offset(0, 2).ColumnWidth
End If
If Startzelle.Offset(0, 7).ColumnWidth > SpaltenbreiteMax Then
SpaltenbreiteMax = Startzelle.Offset(0, 7).ColumnWidth
End If
AnzBelegung = 0
Zähler = 0
For n1 = 0 To AnzZeilen
If Startzelle.Offset(n1, 4).Value > "" Or _
Startzelle.Offset(n1, 9).Value > "" Then
Zähler = Zähler + 1
Startzelle.Offset(n1, 0).RowHeight = ZeilenhöheTermin
End If
If Nachbarzelle.Offset(n1, 4).Value > "" Or _
Nachbarzelle.Offset(n1, 9).Value > "" Then
Nachbarzelle.Offset(n1, 0).RowHeight = ZeilenhöheTermin
End If
Next n1
If Zähler > AnzBelegung Then
AnzBelegung = Zähler
End If

Columns(Spalte1 + 2).AutoFit
Columns(Spalte1 + 7).AutoFit
Columns(Spalte2 + 2).AutoFit
Columns(Spalte2 + 7).AutoFit
HöheAnpassungswert = (angepassteHöhe - Zeilenhöhe) / AnzBelegung

For n1 = 0 To AnzZeilen
If Startzelle.Offset(n1, 4).Value > "" Or _
Startzelle.Offset(n1, 9).Value > "" Then
Startzelle.Offset(n1, 0).RowHeight = ZeilenhöheTermin + HöheAnpassungswert
End If
Next n1

' Manuelles Neusetzen der Zeilenhöhe, falls nötig
For n1 = 0 To AnzZeilen
If Startzelle.Offset(n1, 4).Value > "" Or _
Startzelle.Offset(n1, 9).Value > "" Then
Startzelle.Offset(n1, 0).RowHeight = ZeilenhöheTermin + HöheAnpassungswert
End If
Next n1

Set Bereich = Range("Druck_Seite6")
Bereich.Select
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
.CenterFooter = ""
.Orientation = xlPortrait
End With
Application.GoTo Reference:="Druck_Seite6"
Selection.PrintPreview
' Selection.PrintOut

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Änderungen im Code:

Ich habe den DoEvents Befehl nach dem Setzen der Zeilenhöhen hinzugefügt, um sicherzustellen, dass Excel die Änderungen verarbeitet.
Ich habe eine doppelte Schleife zum Setzen der Zeilenhöhe hinzugefügt, um sicherzustellen, dass die Zeilenhöhe korrekt angewendet wird.
Teste diese Anpassungen und beobachte, ob das Problem weiterhin auftritt. Wenn ja, können wir weiter nach Lösungen suchen.

Für weiterführende Unterstützung kannst Du auch Herbers Online-Forum unter Herber's Excel-Forum besuchen.

--- Ende des Zitats ---

Gruß, MCO
Anzeige
AW: Die KI sagt....
17.09.2024 11:00:17
Siegfried
Hi MOC

zunächst vielen Dank für Deine Anregungen.
Du sprichst davon, im Code ein Do Event gesetzt zu haben.
Leider kann ich den nicht finden.
Nach Abschluß des Tests mit einer zweiten Schleife werde ich mich wieder melden.

Gruß
Siegfried
AW: Die KI sagt....
17.09.2024 11:07:47
Siegfried
Hi MCO,

die Wiederholung der Schleife hat keine Veränderung bewirkt.
Bleibt noch die Idee mit Do Event.

Gruß
Siegfried
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige