Диаграмма повреждена после .SetElement «Указанное измерение недопустимо для текущего типа диаграммы».

Диаграмма повреждена после .SetElement «Указанное измерение недопустимо для текущего типа диаграммы».

У меня есть рабочая книга Excel 2007 с несколькими диаграммами на одном листе (сложенная столбчатая диаграмма и одна серия в виде (невидимой) линии для итогов). В зависимости от ячейки, выбранной пользователем, столбчатые диаграммы должны иметь соединители или нет.

Для этого у меня есть небольшая процедура VBa, запускаемая событием, Worksheet_Changeкоторая проходит по диаграммам и устанавливает соединители, используя objChart.SetElement msoElementLineSeriesLineили objChart.SetElement msoElementLineNoneсоответственно.

Это обычно работает в 90% случаев. Однако иногда - на некоторых, различных графиках - objChart.SetElementприводит к ошибке -2147467259 The specified dimension is not valid for the current chart type.- и ломает график, поэтому он выглядит так:

Пример поврежденной диаграммы

Способ исправления этой ошибки после ее возникновения — повторное открытие файла, даже если он был сохранен после возникновения ошибки. Поэтому, похоже, это какая-то проблема с отображением.

решение1

Я думаю, что SetElement msoElementLineSeriesLine не такой надежный, как старый синтаксис ChartGroups(i).HasSeriesLines

msoElementLineSeriesLine, похоже, не понимает группы диаграмм, группы осей и т. д. Возможно, если первая серия, которую он замечает, не является сложенной полосой или столбцом, он подавляется.

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

Забавно, что в обновленном движке диаграмм 2007/2010 гг. все еще была возможность добавлять линии серий в пользовательский интерфейс, но в 2013 г. я не могу ее найти (хотя, как я уже сказал, приведенный выше код работает нормально).

Связанный контент