2010-11-04 49 views
1

有没有什么办法可以在Excel工作表中(不在表单中)获得鼠标下的对象。获取Excel工作表下的鼠标对象

原因是我有一堆图表和一些形状在他们身上。当我点击特定图表上的形状时,宏将启动,在当前图表(ActiveChart)中执行一些操作。但是,只有在点击图形之前激活图表才有效。如果您在未激活图表的情况下单击形状,则ActiveChart为Nothing。

所以,我需要一些方法来获取鼠标下的对象/图表/单元格。

表和书没有click或mousemove事件。在所有图表上设置一个我也遇到了与上述相同的问题。

我也没有弄清楚如何找出哪个形状被点击(因为_Click宏没有任何参数)。 E

谢谢。

回答

2

您可以尝试使所有的形状名称都是唯一的,并在每个名称中包含图表名称。

然后,您可以使用Application.Caller在处理点击的宏中获取形状名称。从那里,你可以解析出图表名称。

Tim

+0

我在工作表上有很多图表。图表可以打开或关闭。感谢Application.Caller注意。我可以得到点击矩形的范围并遍历图表来查找它所属的图表范围。我不确定你的意思:从这里,你可以解析出图表的名称,但我会研究它。 – majkinetor 2010-11-06 09:17:00

+0

对于包含在图表中的形状(我假设这里是这种情况),通常的“唯一名称”约束似乎并不适用,所以您无法确定点击形状的名称究竟是什么图表。这就是为什么我建议命名你的形状(例如)“Chart1_ShapeName1”。 – 2010-11-09 01:37:15

+0

Excel不允许您命名形状。但是,我设法通过VBA代码更改名称,并且这样做。谢谢。 – majkinetor 2010-11-12 12:42:28

0

点击图表将激活其父表和书。所以你可以使用类似
ActiveSheet.Charts(0) 如果你只有1张图表每张。
要找出被点击的内容,你可以让调用者提供它的名字/ id作为参数(这里可能不可用)或者设置一个全局变量(不是很好,但可以在单个用户/单个进程上下文中使用)。

+0

不可行。首先,图表不会被激活。我有更多的1图表(实际上是任何数字)。设置全局变量并不实际,因为每个图表都有一个按钮,所以我需要为每个图表分配一个子分支,而不是像现在那样将每个点击处理程序分配给同一个子例程。 – majkinetor 2010-11-06 09:18:52