.SetElement 이후 차트가 손상되었습니다. '지정된 차원은 현재 차트 유형에 유효하지 않습니다.'

.SetElement 이후 차트가 손상되었습니다. '지정된 차원은 현재 차트 유형에 유효하지 않습니다.'

하나의 워크시트에 여러 차트가 있는 Excel 2007 통합 문서가 있습니다(누적 막대 차트와 합계에 대한 (보이지 않는) 선으로 하나의 계열). 사용자가 선택한 셀에 따라 막대형 차트에 커넥터가 있을 수도 있고 없을 수도 있습니다.

이를 위해 Worksheet_Change차트를 반복하고 각각 objChart.SetElement msoElementLineSeriesLine또는를 사용하여 커넥터를 설정하는 이벤트에 의해 트리거되는 작은 VBa 루틴이 있습니다 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년에는 찾을 수 없다는 것입니다(말한 대로 위 코드는 제대로 작동하지만).

관련 정보