Comment supprimer une série à partir d'un tableau Excel à l'aide de VBA
Je suis en train de supprimer le vide de la série à partir d'un graphique dans Excel 2003 à l'aide de VBA. J'ai vu que d'autres personnes ont eu ce problème dans le passé et j'ai essayé toutes les méthodes mentionnées dans leurs postes, mais ont été incapables de trouver quelque chose qui fonctionne toujours.
Le tableau a 14 de la série en elle et n'importe où entre 3 ou 9 d'entre eux peut être vide. Les vides sont toujours entre les Séries 4 - 12.
J'ai essayé quelques variantes de code mais c'est avant tout cela:
Sheets("chart-1").Select
ActiveChart.PlotArea.Select
For i = 12 To 4 Step -1
Dim theSeries As Series
MsgBox (ActiveChart.SeriesCollection(i).Name)
Set theSeries = ActiveChart.SeriesCollection(i)
MsgBox (theSeries.Name)
theSeries.Delete
Next
Je peux l'exécuter avec succès une fois pour un graphique, mais tous les cycles subséquents échouer avec un Unable to get the Name property of the Series class
erreur. Il échoue sur l'appel .Nom.
J'ai été en mesure de le faire fonctionner en insérant des entiers directement, mais il sera exécuté qu'une fois pour tous les entiers sauf 1. Il l'exécuter plusieurs fois pour Series(1)
.
Par exemple, si je appelez simplement: ActiveChart.SeriesCollection, (1).Supprimer, puis la série est supprimé, mais si je puis l'exécuter avec un autre entier (4, 9, 12) il ne s'exécute pas. Il fonctionnera de nouveau pour 1, mais 1 seul. Il permettra également de travailler encore une fois avec d'autres nombres entiers (4), mais tous les appels suivants seront l'échec, même si je change le nombre entier de 1 ou conserver comme 4, soit de le changer pour un autre nombre.
Le comportement est vraiment très étrange.
Toutes les idées seraient grandement appréciés. Je ne peux pas simplement appeler ActiveChart.SeriesCollection(1).Delete
à plusieurs reprises parce que les 3 premiers de la série sont toujours non vide.
Grâce.
** Mise à jour **
J'ai juste couru un test manuellement en exécutant la commande suivante:
Sheets("ch-v2-12mth").Select
ActiveChart.PlotArea.Select
MsgBox (ActiveChart.SeriesCollection(1).Name)
J'ai pédalé à travers le SeriesCollection, essayer les nombres de 1 à 16 (il y a seulement 14 de la Série dans le tableau) pour voir le résultat.
1 - 3 a bien fonctionné
4 - 13 erronées avec Unable to get the Name property of the Series class
14 a bien fonctionné
15 - 16 erronées avec Method 'SeriesCollection' of object '_Chart' failed
< n'est pas surprenant étant donné le nombre de série dans le tableau.
Ce type de comportement me fait penser qu'il y a un bug avec Excel. D'autres idées?
essentiellement, oui, c'est ce que j'essaie, sans avoir les étiquettes de données. J'ai mis à jour la demande initiale avec les résultats d'autres tests que j'ai fait. Les résultats sont assez bizarre. Merci pour votre aide, mais je suis toujours d'obtenir le même comportement et les erreurs. D'autres idées?
Pouvez-vous opload un exemple de fichier excel afin que je puisse jouer un peu avec elle? De cette façon, je n'auront pas à créer un fichier d'exemple. Vous pouvez télécharger le fichier wikisend.com et puis de partager le lien ici.
Je viens de tester le code que vous avez posté, et il a fonctionné très bien.
Que faire si vous reconstruire votre carte dans un nouveau classeur, puis exécutez de nouveau le code?
OriginalL'auteur getting-there | 2012-08-09
Vous devez vous connecter pour publier un commentaire.
Il y a des bugs dans Excel lorsque vous supprimez tous la série à partir d'un graphique. Ma solution est de toujours laisser au moins une série (même si elle n'a pas de données) dans le graphique. Qui semble fonctionner pour moi.
Viens de penser à autre chose. Lorsque vous supprimez une série, l'index de toutes les autres séries se réduit à un, donc vous ne pouvez pas les supprimer en faisant une boucle de 1 pour le numéro de série. Ce que vous pouvez faire est d'avoir une boucle qui supprime jusqu'à ce que le
SeriesCollection.Count = 0
(ou 1, voir mes commentaires précédents). Ou une boucle qui itère en arrière et toujours de supprimer le dernier de la série (c'est à direSeriesCollection(SeriesCollection.Count).Delete
OriginalL'auteur steveo40
Vous ne pouvez pas supprimer toutes les séries ou le tableau de l'enlever lui-même. ce que je fais pour contourner ce problème consiste à renommer tous les existants de la série, puis entrez votre code de construire de nouvelles choses; puis d'exécuter un autre extrait de supprimer la série que vous avez renommé
Avez-vous peut-être dire
If .SeriesCollection(c).Name Like "remove*" then ...
?Vous supprimer toutes les séries. Le tableau restera, mais il sera vide jusqu'à ce que vous ajoutez plus de données. Un grand nombre des éléments qui ont disparu lorsque les données ont été effacées aura perdu la mise en forme, et les titres ont perdu leur texte.
OriginalL'auteur Orin Moyer
Vous pouvez simplifier votre code:
Je ne sais pas pourquoi le code ne fonctionne pas pour vous, mais le plus simple est généralement mieux. Et vous n'avez pas besoin de connaître le nom de la série pour supprimer une série.
OriginalL'auteur Jon Peltier