Code läuft nur im Debug korrekt
28.04.2022 07:29:00
AlexB
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