Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1880to1884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code läuft nur im Debug korrekt

Code läuft nur im Debug korrekt
28.04.2022 07:29:00
AlexB
Guten Morgen zusammen,
ich habe ein seltsames Problem. Ich versuche meine Charts automatisch zu formatieren und es funktioniert korrekt im Debug Modus (Step by Step) aber funktioniert nicht mehr, wenn ich den Code normal als Macro aufrufe.
Konkret funktioniert folgender Code nicht

If Not ch.HasLegend Then
ch.Axes(xlValue, xlPrimary).TickLabelPosition = xlNextToAxis
ch.Legend.IncludeInLayout = False
ch.ApplyLayout 4
ch.HasLegend = False
Else
ch.Axes(xlValue, xlPrimary).TickLabelPosition = xlNextToAxis
ch.Legend.IncludeInLayout = False
ch.ApplyLayout 4
End If
und darin ApplyLayout 4.
ApplyLayout 4 sollte den Chart auf dieses Layout zurücksetzen. Dies ist nötig, weil es sich um Altlastencharts handelt, in denen nicht mehr korrekt Platz für die Legende geschaffen wird. Sprich, die Legende überlagert den Plot oder der Plot passt seine größe nicht an, wenn man die Legende entfernt.
Führe ich im Debug aus, so wird das Layout angewandt und ggf. anschließend die Legende entfernt (und der Plot entsprechend vergrößert).
Führe ich als Macro aus, dann erfolgt dies nicht.
Hier der Code davor:

lngChartSheetsCount = 0
For Each ws In Worksheets
For Each objChartObject In ws.ChartObjects
Set ch = objChartObject.Chart
On Error Resume Next
If commentarea = "y" Then
ch.Axes(xlValue, xlSecondary).HasTitle=False
ch.Axes(xlValue, xlSecondary).MajorTickMark = xlNone
ch.Axes(xlValue, xlSecondary).MinorTickMark = xlNone
ch.Axes(xlValue, xlSecondary).TickLabelPosition = xlNone
End If
If Not ch.HasLegend Then
ch.Axes(xlValue, xlPrimary).TickLabelPosition = xlNextToAxis
ch.Legend.IncludeInLayout = False
ch.ApplyLayout 4
ch.HasLegend = False
Else
ch.Axes(xlValue, xlPrimary).TickLabelPosition = xlNextToAxis
ch.Legend.IncludeInLayout = False
ch.ApplyLayout 4
End If
Kann mir jemand sagen, woran es liegt? Hatte auch mal versucht ein Application.Wait mit 1 sec in die beiden ch.HasLegend bedingten Anweisungen einzubauen. Half nicht.
Vielen Dank für eure Hilfe
Alex

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

Betreff
Datum
Anwender
Anzeige
AW: Code läuft nur im Debug korrekt
28.04.2022 09:30:37
Beverly
Hi Alex,
du solltest mal die Zeile On Error Resume Next auskommentieren - möglicherweise ist ja doch ein Fehler im Code, der einen Befehl verhindert.
Außerdem kannst du die folgende Zeile ergänzen:

ch.Refresh
Vielleicht hilft das ja schon.
Bis später
Karin

AW: Code läuft nur im Debug korrekt
28.04.2022 16:49:44
AlexB
Vielen Dank @Karin
in der Tat gibt es einen Fehler, den ich aufgrund des Resume Next nicht gesehen habe.

ch.Axes(xlValue, xlPrimary).Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
ch.Axes(xlCategory).Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
ch.Legend.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
Dieser Code funktioniert nicht. Dieser stammt aus dem Macro Recorder.
Weißt du oder jemand anderes eventuell wieso es hier zu einem Fehler kommt?
Beste Grüße
Alex
Anzeige
AW: Code läuft nur im Debug korrekt
28.04.2022 18:21:05
Beverly
Hi Ales,
ich nehme an, du willst die Farbe der Achsenbeschriftung formatieren? Dein Code soll jedoch die Achse selbst formatieren, und die hat natürlich keinen TextFrame2.
Versuche es mal so:

ch.Axes(xlCategory).TickLabels.Font.Color = RGB(0, 0, 0)
Bis später
Karin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige