11
votes

Comment puis-je référencer des tableaux avec le même nom, mais sur différentes feuilles de calcul?

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> xxx pré>

et le La sortie que je reçois dans la fenêtre immédiate est la suivante: p> xxx pré>

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 pour chaque Chartobject code> a couru dans les mêmes problèmes que j'avais précédemment: p> xxx pré>

g AVE: P>

Grafar ovn 4
Kortsone
Grafar ovn 3 Kortsone
Grafar ovn 4
Langsone
Grafar ovn 3 Langsone
...


5 commentaires

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


@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 . Voir ma réponse ci-dessous.


3 Réponses :


5
votes

Comme vous l'avez découvert, la méthode 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.

Le comportement est le même si vous utilisez la feuille de calcul .shapes code> pour rechercher le charcutOgject. P>

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>

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


0 commentaires

1
votes

GetChart retournera l'objet graphique sur une feuille de calcul spécifique.

getchart stocke les objets de graphique dans un Collection statique . La collection restera en mémoire jusqu'à ce qu'il y ait une pause de code ou le classeur est fermé.

La première fois que vous appelez getchart 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.

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.

Get Tableau xxx

test xxx


0 commentaires

1
votes

Il y a une différence entre graphique et la feuille de calcul.chatobject.chart . .

préciser que

  • Lorsque vous créez un graphique dans une feuille de calcul, Excel crée un Chartobject pour contenir le graphique . Donc, le graphique est un enfant de ChildObject qui est à son tour un enfant de la feuille de calcul . .
  • Lorsque vous créez un graphique comme une feuille , il s'agit d'un graphique (ou vous pouvez appeler la "feuille de graphique") équivalente à une feuille de calcul .

    Par conséquent, une feuille de calcul .ChartObject.chart est différente d'un graphique (code> de la page suivante:

    • A graphique à partir de feuille de calcul.chatobject.chart contient toutes les propriétés d'un graphique.
    • A Tableau contient toutes les propriétés d'un graphique et des propriétés d'une feuille.

      donc le nom est censé être pour graphique fiche mais non pour la feuille de calcul.chatobject.chart .

      Je dirais que je dirais l'affichage supplémentaire du nom Activeheet lors de l'appelant graphtobject.chart.name n'est pas un bogue mais un bug débogué. ChartObject.Chart ne serait pas et ne devrait pas avoir de nom en premier lieu. Vous pouvez appeler charktobject.chart.name car il existe un chevauchement dans l'intellisense pour un modèle d'objet de graphique . Microsoft n'avait pas autorisé cela, il y aurait un bogue.

      Donc en bref, rappelez-vous que un graphique n'a pas de nom, c'est le Chartobject ou la feuille qui porte le nom . Pour revoir cela, un graphique a graphttitle .


1 commentaires

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!