2013-04-11 8 views
1

Donc im obtenir un échec de graphique a échoué et il semble que ce soit à cause de mon nom WBname, mais je ne peux pas le comprendre. J'ai eu une question similaire plus tôt mais comme c'est un peu différent, j'ai pensé que je ferais une nouvelle question. Voici le code im ayant des problèmes avec:Le graphique vba Excel 2003 a échoué

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 sort comme je veux mais je reçois toujours des erreurs.

Method 'SeriesCollection' of object '_Chart' Failed 

Le nom de la feuille change dynamiquement et correspond au nom WB FYI.

EDIT: i ajouté

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

et il semble fonctionner

+1

Quelle est l'erreur?!?!?! – RBarryYoung

+0

je reçois méthode 'SeriesCollection' de l'objet '_Chart' Échec – user2271563

+0

j'ai ajouté ActiveChart.SetSourceData Source: = Sheets (WBname) .Range ("A4: A5000") et il semble fonctionner maintenant, mais je ne comprends pas pourquoi – user2271563

Répondre

1

Vous obtenez cette erreur parce que vous essayez d'attribuer des valeurs à la série qui est pas là;)

Vous devez d'abord ajouter la série, puis lui affecter des valeurs. Voir cet exemple

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 

FOLLOWUP

Vous obtenez série sometimes supplémentaire parce que votre curseur se trouve dans les données, par exemple dans la cellule B5 ou I10 ou d'une autre cellule. Excel par défaut ajoute la série lorsque vous dites Charts.Add dans un tel scénario. Assurez-vous qu'aucune de vos données n'est sélectionnée lorsque vous exécutez la macro. Une alternative consiste à supprimer la collection de la série après Charts.Add. Voir cet exemple

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

Lorsque je l'ai utilisé, je voudrais une série de données supplémentaires avec pas de données – user2271563

+0

Je suis désolé, je n'ai pas compris ce que vous venez de dire. –

+0

quand j'ai ajouté ActiveChart.SeriesCollection.NewSeries à mon code j'avais une 5ème série (devrait seulement avoir 4). Mais quand je l'ai sorti je n'ai que 4 séries comme je devrais. Je pourrais faire autre chose de mal si – user2271563

0

Vous ne dites pas ce que vous voulez feuille travailler. (en supposant que le classeur est vraiment nécessaire, ce n'est pas le cas la plupart du temps):

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

devrait fonctionner mieux.

(dans ces cas, il suffit d'utiliser l'enregistreur de macro pour obtenir la bonne façon de le faire et l'adapter à vos besoins après)

+0

Je ne peux pas utiliser sheet1 parce que le nom de la feuille change dynamiquement et le nom de la feuille correspond à WBname – user2271563

+0

Bien ... utiliser les classeurs (WBname) .Sheets (1) ou Workbooks (WBname) .Sheets (WBName) – mansuetus

Questions connexes