J'ai deux feuilles de calcul contenant des graphiques et utilisez une macro pour exécuter toutes les feuilles avec des graphiques en eux et mettez à jour les valeurs car les valeurs traitées. Cependant, je rencontre un problème lorsque vous essayez de référencer les graphiques dans les feuilles après le premier - bien que la référence de la feuille de calcul change, la référence au graphique ne le fait pas. p>
La boucle ressemble à ceci: p> et le La sortie que je reçois dans la fenêtre immédiate est la suivante: p> Comme vous pouvez le voir la référence à la feuille de calcul, mais la référence de graphique ne le fait pas. P> Y a-t-il un moyen de résoudre ce moyen ou devrai-je renommer toutes mes cartes avec des noms uniques? P> J'utilise Excel 2013 P> - Edit - Strong> J'ai maintenant fait des tests basés sur des suggestions dans les commentaires, et il semble que ce qui est imprimé sur la fenêtre immédiate dépend de ce qui est actuellement la feuille active. p> essayer d'utiliser g AVE: P> pour chaque Chartobject code> a couru dans les mêmes problèmes que j'avais précédemment: p> Grafar ovn 4
Kortsone
Grafar ovn 3 Kortsone
Grafar ovn 4
Langsone
Grafar ovn 3 Langsone
...
3 Réponses :
Comme vous l'avez découvert, la méthode Le comportement est le même si vous utilisez la feuille de calcul Ce comportement est différent des versions antérieures d'Excel. J'ai confirmé que le code a fonctionné dans Excel XP / 2002 et ne fonctionne pas en 2016. Je ne suis pas sûr lorsque le comportement a changé. Cela aurait pu être 2013, sinon cela aurait pu être un correctif pour 2013 et 2016? Le comportement au bureau pour Mac 2016 est identique (c.-à-d. Ne fonctionne pas) p> jusqu'à ce que Microsoft apparaisse avec une solution, vous devez activer la feuille ou activer le charcutobject, Avant em> vous accédez à la propriété Graphique. P> workheet.chartobjects code> va trouver em> le bon charcutobject, mais accédant à la propriété chartobject.chart code> le tableau de la feuille d'activité. Peu importe si vous vous référez à la charteTObject par nom ou par numéro d'index. .shapes code> pour rechercher le charcutOgject. P> Sub test()
Dim ws As Worksheet
Dim co As ChartObject
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Set co = ws.ChartObjects("Kortsone")
ws.Activate
'or
co.Activate
Debug.Print co.Chart.Name
With ws.ChartObjects("Kortsone").Chart
End With
Next ws
End Sub
La première fois que vous appelez Dans le cas où un graphique (par exemple, un graphique a été ajouté après que la fonction a été appelée) n'est pas dans la collection que la fonction se rechargera. P> getchart code> stocke les objets de graphique dans un Collection statique code>. La collection code> > restera en mémoire jusqu'à ce qu'il y ait une pause de code ou le classeur est fermé. P> getchart code> tout le graphique Objets Toutes chaque feuille de calcul est activée et chaque carte de chaque feuille de calcul est ajoutée à la collection. Après cela, le graphique est simplement recherché dans la collection statique. p> Get Tableau h2>
test h2>
Il y a une différence entre préciser que p>
Par conséquent, une feuille de calcul donc le Je dirais que je dirais l'affichage supplémentaire du nom Activeheet lors de l'appelant Donc en bref, rappelez-vous que un graphique n'a pas de nom, c'est le graphique code> et la feuille de calcul.chatobject.chart code>. p>.
Chartobject code> pour contenir le graphique code>. Donc, le graphique code> est un enfant de ChildObject code> qui est à son tour un enfant de la feuille de calcul code>. Li>.
code>. li>
ul>
.ChartObject.chart code> est différente d'un graphique code> (code> de la page suivante: p>
graphique code> à partir de feuille de calcul.chatobject.chart code> contient toutes les propriétés d'un graphique. Li>
Tableau Code> contient toutes les propriétés d'un graphique et des propriétés d'une feuille. Li>
ul>
graphique code> fiche mais non pour la feuille de calcul.chatobject.chart code>. p>
graphtobject.chart.name code> n'est pas un bogue mais un bug débogué. ChartObject.Chart Code> ne serait pas et ne devrait pas avoir de nom code> en premier lieu. Vous pouvez appeler charktobject.chart.name code> car il existe un chevauchement dans l'intellisense pour un modèle d'objet de graphique code>. Microsoft n'avait pas autorisé cela, il y aurait un bogue. P>
Chartobject code> ou la feuille code> qui porte le nom fort>. Pour revoir cela, un graphique a graphttitle code>. P>
uhoh ... ma réponse vient de se faire connaître. J'ai certainement passé beaucoup de temps à rechercher cela, mais ok aucun gros problème. Quoi qu'il en soit, laissez-moi savoir si quelque chose ne va pas avec la réponse et je suis heureux de faire les corrections .. TKS!
J'ai été incapable de reproduire ceci. Cela a fonctionné bien sur Excel 2010. Quelle version utilisez-vous?
@Brettwolfington 2013
Vous ne pouvez pas utiliser une boucle imbriquée? Comme ceci:
pour chaque WS dans ce workbook.worksheets pour chaque CO in Ws.Chartobjects ... Suivant CO Suivant WS code>@tom je viens de l'essayer, ça fait la même erreur.
Nope n'est pas censé l'appeler de cette façon
ch.chart.name code>. Voir ma réponse ci-dessous.