2013-04-11 2 views
1

그래서 차트를 가져 오는 중 오류가 발생하여 내 이름이 WBname 인 것처럼 보이지만 그럴 수는 없습니다. 이전에 비슷한 질문이 있었지만 조금 다른 점 때문에 새로운 질문을 할 것이라고 생각했습니다. 다음은 문제가있는 메신저 코드입니다.Excel 2003 vba 차트가 실패했습니다

Dim WBname As String 
WBname = Replace(ActiveWorkbook.Name, ".xls", "") 
Worksheets(WBname).Activate 
Charts.Add 
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers 
ActiveChart.SeriesCollection(1).XValues = Worksheets(WBname).Range("A4:A5000") 
ActiveChart.SeriesCollection(1).Values = Worksheets(WBname).Range("B4:B5000") 
ActiveChart.SeriesCollection(1).Name = Worksheets(WBname).Range("B3") 
ActiveChart.SeriesCollection.NewSeries 
ActiveChart.SeriesCollection(2).XValues = Worksheets(WBname).Range("A4:A5000") 
ActiveChart.SeriesCollection(2).Values = Worksheets(WBname).Range("C4:C5000") 
ActiveChart.SeriesCollection(2).Name = Worksheets(WBname).Range("C3") 
ActiveChart.SeriesCollection.NewSeries 
ActiveChart.SeriesCollection(3).XValues = Worksheets(WBname).Range("A4:A5000") 
ActiveChart.SeriesCollection(3).Values = Worksheets(WBname).Range("D4:D5000") 
ActiveChart.SeriesCollection(3).Name = Worksheets(WBname).Range("D3") 
ActiveChart.SeriesCollection.NewSeries 
ActiveChart.SeriesCollection(4).XValues = Worksheets(WBname).Range("A4:A5000") 
ActiveChart.SeriesCollection(4).Values = Worksheets(WBname).Range("I4:I5000") 
ActiveChart.SeriesCollection(4).Name = Worksheets(WBname).Range("I3") 

WBname이 나오고 있지만 여전히 오류가 발생합니다.

Method 'SeriesCollection' of object '_Chart' Failed 

시트 이름이 동적으로 변경되며 WBname 참고와 일치합니다.

편집 : 나는

ActiveChart.SetSourceData Source:=Sheets(WBname).Range("A4:A5000") 

를 추가 당신이 작업 할 것을 시트 이야기하지 않을

+1

무엇이 오류입니까?!?!! – RBarryYoung

+0

''_Chart '메서드의'SeriesCollection '메서드가 실패했습니다. – user2271563

+0

ActiveChart.SetSourceData를 추가했습니다. Source : = Sheets (WBname) .Range ("A4 : A5000") 이제는 작동하는 것 같지만 이유는 모르겠습니다. – user2271563

답변

1

을 (이 경우, 단지 그 일의 적절한 방법을 얻을 후 사용자의 요구에 적응하기 위해 매크로 레코더를 사용))

먼저 시리즈를 추가 한 다음 값을 할당해야합니다. 커서가 셀 B5 또는 I10 또는 다른 셀에 예를 들어 데이터에 있기 때문에 당신은 별도의 시리즈 sometimes을 받고이 예

Sub Sample() 
    Dim WBname As String 
    WBname = Replace(ActiveWorkbook.Name, ".xls", "") 
    Worksheets(WBname).Activate 

    Charts.Add 
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers 

    ActiveChart.SeriesCollection.NewSeries '<~~~~~ SEE THIS 

    ActiveChart.SeriesCollection(1).XValues = Worksheets(WBname).Range("A4:A5000") 
    ActiveChart.SeriesCollection(1).Values = Worksheets(WBname).Range("B4:B5000") 
    ActiveChart.SeriesCollection(1).Name = Worksheets(WBname).Range("B3") 
End Sub 

후속

를 참조하십시오. 이러한 시나리오에서 Excel은 기본적으로 Charts.Add이라고 말하면 시리즈를 추가합니다. 매크로를 실행할 때 데이터가 선택되지 않도록하십시오. 대안은 Charts.Add 이후에 시리즈 컬렉션을 삭제하는 것입니다. 이 예제를 참조하십시오

Sub Sample() 
    Dim WBname As String 
    Dim i As Long 

    WBname = Replace(ActiveWorkbook.Name, ".xls", "") 
    Worksheets(WBname).Activate 
    Charts.Add 

    With ActiveChart 
     On Error Resume Next 
     For i = .SeriesCollection.Count To 1 Step -1 
      .SeriesCollection(i).Delete 
     Next i 
     On Error GoTo 0 

     .ChartType = xlXYScatterSmoothNoMarkers 

     .SeriesCollection.NewSeries 
     .SeriesCollection(1).XValues = Worksheets(WBname).Range("A4:A5000") 
     .SeriesCollection(1).Values = Worksheets(WBname).Range("B4:B5000") 
     .SeriesCollection(1).Name = Worksheets(WBname).Range("B3") 

     .SeriesCollection.NewSeries 
     .SeriesCollection(2).XValues = Worksheets(WBname).Range("A4:A5000") 
     .SeriesCollection(2).Values = Worksheets(WBname).Range("C4:C5000") 
     .SeriesCollection(2).Name = Worksheets(WBname).Range("C3") 

     .SeriesCollection.NewSeries 
     .SeriesCollection(3).XValues = Worksheets(WBname).Range("A4:A5000") 
     .SeriesCollection(3).Values = Worksheets(WBname).Range("D4:D5000") 
     .SeriesCollection(3).Name = Worksheets(WBname).Range("D3") 

     .SeriesCollection.NewSeries 
     .SeriesCollection(4).XValues = Worksheets(WBname).Range("A4:A5000") 
     .SeriesCollection(4).Values = Worksheets(WBname).Range("I4:I5000") 
     .SeriesCollection(4).Name = Worksheets(WBname).Range("I3") 
    End With 
End Sub 
+0

나는 여분의 데이터 시리즈 것이라고 것을 사용하는 경우 데이터가 없습니다 – user2271563

+0

죄송합니다. 방금 말씀하신 내용을 이해하지 못했습니다. –

+0

내 코드에 ActiveChart.SeriesCollection.NewSeries를 추가하면 5 번째 시리즈 (4 개만 있어야 함)가 나타납니다. 그러나 나가 그것을 가지고 갈 때 나는 나가해야하는 것처럼 단지 4 개의 시리즈가있다. 나는 뭔가 다른 일을하고있을 수도 있지만 – user2271563

0

을 작동하는 것 같다.

Workbooks(WBname).Sheets("Sheet1").Range("A4:A5000") 

더 잘 작동합니다 : (워크 북이 정말로 필요하다고 가정하면, 즉 대부분의 시간이 아니다).

는이 시리즈에 값을 할당하려고하기 때문에 당신은 그 오류를 얻고있다

+0

I can not use 시트 1 시트 이름은 동적으로 변경 및 시트 이름은 WBname – user2271563

+0

음 ... 통합 문서를 사용하여 일치하기 때문에 (WBname) .Sheets (1) 또는 통합 문서 (WBname) .Sheets (WBName) – mansuetus