2010-11-04 19 views
1

Y at-il un moyen d'obtenir l'objet sous la souris dans la feuille Excel (pas dans le formulaire).Obtenir l'objet de feuille Excel sous la souris

La raison en est que j'ai un tas de graphiques et quelques formes sur eux. Lorsque je clique sur la forme sur le graphique spécifique, la macro est lancée, en faisant des choses sur le graphique en cours (ActiveChart). Toutefois, cela ne fonctionne que si le graphique est activé avant de cliquer sur la forme. Si vous cliquez sur forme sans activer le graphique, ActiveChart est Nothing. Donc, j'ai besoin d'un moyen d'obtenir l'objet/graphique/cellule qui est sous la souris. La feuille et le livre n'ont pas d'événement click ou mousemove.

En réglant celui sur tous les graphiques, j'ai aussi le même problème que celui décrit.

Je n'ai pas non plus compris comment trouver la forme sur laquelle on a cliqué (puisque la macro _Click n'a aucun paramètre). E

Merci.

Répondre

2

Vous pouvez essayer de rendre uniques tous vos noms de forme et inclure le nom du diagramme dans chacun d'eux.

Ensuite, vous pouvez utiliser Application.Caller dans la macro traitant le clic pour obtenir le nom de la forme. De cela, vous pouvez analyser le nom du diagramme.

Tim

+0

J'ai beaucoup de graphiques sur la feuille. Les graphiques peuvent être activés ou désactivés. Merci pour Application.Caller note. Je peux cliquer sur la plage de rectangles et parcourir les graphiques pour trouver la plage de graphique à laquelle elle appartient. Je ne suis pas sûr de ce que vous voulez dire: à partir de là, vous pouvez analyser le nom de la carte, mais je vais y jeter un coup d'œil. – majkinetor

+0

Pour les formes contenues dans les graphiques (je suppose que c'est le cas ici), la contrainte habituelle de "nom unique" ne semble pas s'appliquer, donc vous ne pouvez pas être sûr du nom de la forme sur laquelle elle est affichée. C'est pourquoi j'ai suggéré de nommer vos formes (par exemple) "Chart1_ShapeName1". –

+0

Excel ne vous permet pas de nommer des formes. Cependant, j'ai réussi à changer le nom via le code VBA et l'ai fait de cette façon. THX. – majkinetor

0

Cliquer sur un graphique va activer sa feuille parent et son livre. Donc, vous pouvez utiliser quelque chose comme
ActiveSheet.Charts(0) si vous avez seulement 1 graphique par feuille.
Pour savoir ce qui a été cliqué, vous pouvez demander à l'appelant de fournir son nom/id en tant qu'argument (peut ne pas être utilisable ici) ou en définissant une variable globale (pas trop belle mais utilisable dans un seul utilisateur).

+0

N'est pas réalisable. Tout d'abord, le graphique n'est jamais activé. J'ai plus de 1 graphique (n'importe quel nombre en fait). Pour définir la variable globale n'est pas pratique car chaque graphique a un bouton, donc j'aurais besoin de 1 sous pour chaque, plutôt comme maintenant où j'affecte chaque gestionnaire de clic au même sous-programme. – majkinetor