Gráfico dañado después de .SetElement 'La dimensión especificada no es válida para el tipo de gráfico actual'.

Gráfico dañado después de .SetElement 'La dimensión especificada no es válida para el tipo de gráfico actual'.

Tengo un libro de Excel 2007 con varios gráficos en una hoja de trabajo (gráfico de barras apiladas y una serie como línea (invisible) para los totales). Dependiendo de la celda seleccionada por el usuario, los gráficos de barras deben tener conectores o no.

Para esto, tengo una pequeña rutina VBa activada por el Worksheet_Changeevento que recorre los gráficos y configura los conectores usando objChart.SetElement msoElementLineSeriesLineo objChart.SetElement msoElementLineNonerespectivamente.

Esto generalmente funciona en el 90% de los casos. Sin embargo, a veces, en algunos gráficos que varían, objChart.SetElementse produce un error -2147467259 The specified dimension is not valid for the current chart type.- y se rompe el gráfico, por lo que se ve así:

Ejemplo de gráfico corrupto

La forma de solucionar este problema después de que se produjo el error es volver a abrir el archivo, incluso si se guardó después de que se produjo el error. Por lo tanto, parece haber algún tipo de problema de visualización.

Respuesta1

Creo que SetElement msoElementLineSeriesLine no es tan sólido como la sintaxis anterior, ChartGroups(i).HasSeriesLines

msoElementLineSeriesLine parece no comprender los grupos de gráficos, grupos de ejes, etc. Quizás si la primera serie que nota no es una barra o columna apilada, se ahoga.

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

Lo curioso es que el rediseño del motor de gráficos de 2007/2010 todavía tenía un medio para agregar líneas de serie en la interfaz de usuario, pero no puedo encontrarlo en 2013 (aunque, como dije, el código anterior funciona bien).

información relacionada