Diagramm beschädigt nach .SetElement „Die angegebene Dimension ist für den aktuellen Diagrammtyp ungültig.“

Diagramm beschädigt nach .SetElement „Die angegebene Dimension ist für den aktuellen Diagrammtyp ungültig.“

Ich habe eine Excel 2007-Arbeitsmappe mit mehreren Diagrammen auf einem Arbeitsblatt (gestapeltes Balkendiagramm und eine Reihe als (unsichtbare) Linie für die Summen). Abhängig von der vom Benutzer ausgewählten Zelle sollten die Balkendiagramme Konnektoren haben oder nicht.

Dazu habe ich eine kleine, ereignisgesteuerte VBa-Routine, Worksheet_Changedie die Diagramme durchläuft und die Konnektoren entweder mit objChart.SetElement msoElementLineSeriesLineoder setzt objChart.SetElement msoElementLineNone.

Dies funktioniert in der Regel in 90 % der Fälle. Manchmal objChart.SetElementtritt jedoch bei einigen, unterschiedlichen Diagrammen ein Fehler -2147467259 auf The specified dimension is not valid for the current chart type.und das Diagramm wird beschädigt. Es sieht dann folgendermaßen aus:

Beispiel für ein beschädigtes Diagramm

Der Fehler lässt sich beheben, indem man die Datei erneut öffnet – auch wenn sie nach dem Auftreten des Fehlers gespeichert wurde. Es scheint sich also um eine Art Anzeigeproblem zu handeln.

Antwort1

Ich denke, SetElement msoElementLineSeriesLine ist nicht so robust wie die alte Syntax ChartGroups(i).HasSeriesLines

msoElementLineSeriesLine scheint Diagrammgruppen, Achsengruppen usw. nicht zu verstehen. Vielleicht gerät es ins Stocken, wenn die erste Reihe, die es erkennt, kein gestapelter Balken oder keine gestapelte Säule ist.

Sub AddSeriesLines()
  Dim cg As ChartGroup
  For Each cg In ActiveChart.ChartGroups
    Select Case cg.SeriesCollection(1).ChartType
      Case xlColumnStacked, xlColumnStacked100, xlBarStacked, xlBarStacked100
        cg.HasSeriesLines = True ' False to remove
    End Select
  Next
End Sub

Lustigerweise gab es bei der Neugestaltung der Diagramm-Engine von 2007/2010 noch eine Möglichkeit, Serienlinien in die Benutzeroberfläche einzufügen, aber im Jahr 2013 kann ich diese nicht finden (obwohl, wie ich sagte, der obige Code einwandfrei funktioniert).

verwandte Informationen