7
votes

Existe-t-il un moyen d'ajouter une étiquette de callout à un point dans un tableau, sans utiliser SELECT?

Y a-t-il un moyen d'ajouter une étiquette de callout à un point dans un tableau, sans utiliser Sélectionner code>?

Enregistrement d'une macro, j'ai obtenu ceci: p>

Sub Macro9()
    ActiveSheet.ChartObjects("SPC").Activate
    ActiveChart.FullSeriesCollection(1).Select
    ActiveChart.FullSeriesCollection(1).Points(4).Select
    ActiveChart.SetElement (msoElementDataLabelCallout)
End Sub


8 commentaires

Ne cherche pas à être possible, la fonction .setellement ne peut pas être appliquée sur le point objet pour une raison quelconque. Vous pouvez définir à peu près toutes les autres propriétés datatalabel mais pas la propriété de callout sans sélectionner.


NEWLIND, un article retourne Un objet de la série, qui n'est pas un Objet Points . Mais je pense que vous pouvez utiliser un élément sur un objet Points. Est-ce que cela prendra un paramètre ?


Vous souhaitez ajouter un callout à seulement 1 point (ou un nombre donné de points, mais pas tous les points)?


@vegard Un nombre donné de points, mais pas tous des points. Sur un tableau arbitraire.


Je ne trouve aucune façon directe façon de le faire ... mais si vous n'êtes pas opposé à un code sale, il devrait être possible de travailler autour de lui. C'est une quantité relativement importante de code pour une telle entreprise "petite" entreprise, mais si vous êtes déterminé à éviter SELECT , nous pouvons ajouter une série invisible avec un seul point sur le dessus de l'existant (dans le Graphique), ce qui signifie que vous pouvez faire setelement sur cette série particulière.


Dans ce cas, je pense que je préférerais utiliser quelque chose de plus proche de la méthode décrite dans la question initiale, car je suis préoccupé par l'ajout d'une série supplémentaire pour chaque callout fliger rapidement la taille du graphique. Cependant, je vous encourage à poster votre solution avec une petite explication dans la section Réponses, car elle serait techniquement une réponse correcte à ma question et donc éligible à la prime. @Vegard


Une autre question - le graphique doit-il avoir des datalabels en général? C'est-à-dire que vous avez besoin de datalabels sur les points qui ne sont pas censés avoir des callants?


@Vegard Il y a un Datatalabel sur l'un des points du graphique actuellement, oui.


4 Réponses :


0
votes

Essayez le code ci-dessous

Sub Macro9()
    ActiveSheet.ChartObjects("SPC").Activate
    ActiveChart.SeriesCollection(1).Points(4).HasDataLabel = True
    ActiveChart.SeriesCollection(1).Points(4).DataLabel.Text = "Point 4 Test"
End Sub


0 commentaires

1
votes

Avez-vous essayé cet outil gratuit http://www.appspro.com/uties/chartlabeler. HTM de Rob Bovey?

Il existe une option "label manuel" qui semble être très proche de ce que vous voulez. J'utilise la version de 1996-97 qui a visible Code VBA. Je n'ai pas vérifié si la dernière version a.


1 commentaires

Je peux confirmer que vous pouvez afficher le code VBA car il est visible dans le fichier de téléchargement du lien fourni.



3
votes

Comme je l'ai dit dans un commentaire: Je ne pouvais pas trouver un moyen de le faire directement mais je pensais pouvoir y travailler.

s'avère que j'étais échoué!

Mais couvrons une affaire de bord qui, pour certaines utilisations, aura une solution assez facile; disons que vous n'avez pas besoin de datatalabels sauf pour les instances où vous souhaitez callout: xxx

pour quiconque désespéré, le plus proche que je suis venu était de créer un Superposition à l'aide du tableau d'origine en tant que modèle. Cependant, cela ne fonctionne pas avec précision pour les graphiques arbitraires, en raison de problèmes de positionnement avec la boîte de callout.

Mais à ce stade, vous pouvez aussi bien avoir juste ajouté une zone de texte ou quelque chose de beaucoup moins impliqué que de copier un Graphique, supprimer la moitié de son contenu et en faire le reste invisible ...

Mais pour le bien de cthul - je veux dire, science: xxx

Et le résultat: Datatalabels intacts avec seulement 1 point ayant des calloutes.

< img src = "https://i.stack.imgur.com/7x8xy.png" alt = "Entrez la description de l'image ici">


2 commentaires

On dirait vraiment bien, et c'était une lecture intéressante à travers votre code, déterminez comment vous avez fait des choses. Cependant, je crains que, au moment où la solution de Siddhart ressemble à la meilleure, il semble donc probable qu'il aura la prime. Vous a donné un uppot cependant: p


Pas un problème - c'est vraiment une meilleure solution. Je n'en étais pas vraiment pour la prime. J'ai reconnu votre nom de quand je l'ai lancé pour la première fois, et vous avez une grande aide sur quoi à l'époque était un projet difficile pour moi (et probablement un peu de sujet aussi). Depuis lors, j'avais beaucoup fermé avec VBA, alors j'ai pensé que je peux au moins offrir des efforts!



8
votes

Est-ce ce que vous essayez? Dans le code ci-dessous, nous avons évité .activate / .select complètement :)

N'hésitez pas à jouer avec .AutoshapeType propriété. Vous pouvez également formater l'étiquette de données pour afficher les valeurs dans n'importe quel format que vous souhaitez. xxx

Capture d'écran

Entrez l'image Description ici


1 commentaires

Cela semble vraiment proche, et cela m'a également appris qu'une étiquette de callout est une sorte de datalabel - pour une raison quelconque, j'ai eu l'impression d'avoir deux objets distincts: p