programing

차트의 반복 호출.SetSourceData 오류 1004 발생

lastcode 2023. 4. 22. 09:32
반응형

차트의 반복 호출.SetSourceData 오류 1004 발생

회사에서 Excel 2003에서 만든 어플리케이션에 문제가 있습니다.애플리케이션은 소스로부터 데이터를 취득해, 를 사용해 차트를 갱신합니다.SetSourceData관련 데이터가 기록되는 셀을 포함하는 범위를 통과하는 VBA 루틴에서.

어플리케이션은 Office 2003에서 정상적으로 실행되지만 Office 2010에서 어플리케이션이 실행되면 다음 오류가 발생합니다.

런타임 오류 '1004':개체'_Chart'의 메서드 'SetSourceData'가 실패했습니다.

작성했습니다.ForOffice 2010에서 간단한 Excel 파일에 루프하고 [Range to the Chart]에서 전달된 열의 수에 따라 조만간 오류가 발생합니다.레인지에서 더 많은 열이 통과할수록 더 빨리 표시됩니다.차트(열 수 증가)의 시계열 수와 관련이 있을 수 있습니다.

이것은 Office 2003에는 없었던 Office 2010에 구현된 차트 오브젝트 또는 시리즈의 메커니즘/버퍼의 일종입니까?똑같다For루프에서는 Office 2003에서 실행할 때 문제가 발생하지 않으며 이 문제를 해결하는 방법을 잘 모르겠습니다.

이제까지 Goto 명령으로 오류를 제어하는 모든 시리즈를 삭제할 수 있었던 것은 다음을 사용하여 SeriesCollection의 모든 시리즈를 삭제하는 것 뿐입니다.For Eachloop을 클릭하여 차트의 SeriesCollection에 있는 모든 개체를 선택합니다.이렇게 하고 다시 Range를 통과했을 때 응용 프로그램 실행을 재개하면 모든 데이터가 차트 객체에 올바르게 그려집니다.

에러를 재현하는 예.다음 코드는 새로운 Excel 2010 워크북의 VBA 모듈에 입력되어야 합니다.서브 실행setDataChart에러 메세지가 표시될 때까지, 애플리케이션은 실행됩니다.

    Sub setDataChart()
    Call createAColValues
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
    ActiveChart.SetSourceData Source:=Range("A1:FA6"), PlotBy:=xlColumns
    ActiveSheet.ChartObjects(1).Activate
    With ActiveChart.Parent
         .Height = 325
         .Width = 900
         .Top = 120
         .Left = 10
    End With
    Call updateValues
    Call sendData
End Sub

    Sub sendData()
    Dim cht As ChartObject
    Set cht = ActiveSheet.ChartObjects(1)

    'On Error GoTo delSeries:
    For i = 0 To 1000
        cht.Chart.SetSourceData Source:=ActiveSheet.Range("A1:FA6"), PlotBy:=xlColumns
    Next i
End Sub

Sub createAColValues()
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("A1:A2").Select
    Selection.AutoFill Destination:=Range("A1:A6"), Type:=xlFillDefault
    Range("A1:A6").Select
End Sub

Sub updateValues()
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=RANDBETWEEN(0,10)"
    Range("B1").Select
    Selection.AutoFill Destination:=Range("B1:B6"), Type:=xlFillDefault
    Range("B1:B6").Select
    Selection.AutoFill Destination:=Range("B1:FA6"), Type:=xlFillDefault
    Range("B1:FA6").Select
End Sub

이것은, 에러가 발생하는 이유에 대해서는 설명하지 않습니다.이것은 회피책입니다.

전화하기 전에SetSourceData현재 차트에 있는 기존 시리즈를 모두 삭제하면 코드가 예상대로 실행됩니다.

For j = cht.Chart.SeriesCollection.Count To 1 Step -1 
    cht.Chart.SeriesCollection(j).Delete
Next j

애초에 왜 에러가 발생했는지 모르겠지만, 이것으로 에러가 해소됩니다.

또 다른 방법으로는 다음 명령어를 사용하여 정의된 데이터의 이름 있는 범위를 정의하는 방법이 있습니다.Offset식과 적절한 기준 셀.이를 위해서는 데이터가 연속되어 있어야 하며 첫 번째 행과 열을 변경하지 않고 적어도1개의 참조식을 설정해야 합니다.(=COUNTA()데이터가 들어 있는 열/행)에서 오프셋 범위의 높이/폭을 설정하는 데 사용할 수 있습니다.

아니면 매크로에서 이것을 꺼내 워크시트 논리에 넣기 위한 매우 편리한 작은 작업입니다.

언급URL : https://stackoverflow.com/questions/26503295/repeated-calls-of-chart-setsourcedata-give-error-1004

반응형