VBA Excel 2010 – select图表图例时运行代码

目前我正在尝试做什么,我不知道这是甚至可能的,我甚至不知道从哪里开始(我试过这个代码,但我无法得到它甚至工作)。

我试图让一个macros自动运行,当点击一个图表的传说,我知道你可以分配一个macros图表来运行它们,但如果可能的话,我想这样做从图表的传说。 我想运行的代码如下,这是一个简单的开关打开/closures图表线

If ActiveChart.SeriesCollection(1).Format.Line.Visible = msoTrue Then ActiveChart.SeriesCollection(1).Format.Line.Visible = msoFalse ElseIf ActiveChart.SeriesCollection(1).Format.Line.Visible = msoFalse Then ActiveChart.SeriesCollection(1).Format.Line.Visible = msoTrue End If 

如果这是不可能的,我可以诚实地看到为什么,但如果有什么想法可以变得更好

编辑:

我在这里想要做的一个小错误,对不起,我希望单击图例条目时运行的代码,这是彩色线旁边图例的文本部分(所以图表行1,图表行1等等),希望能够澄清它

这假定,您有embedded的图表对象作为第一个工作表中的第一个图表对象。

我在Sheet1中有以下内容: 在这里输入图像说明

创build一个类模块。 将其命名为clsChartEvents 。 在那个类模块中放置下面的代码:

 Public WithEvents myChart As Chart Private Sub myChart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long) Dim ElementID As Long, Arg1 As Long, Arg2 As Long With myChart .GetChartElement x, y, ElementID, Arg1, Arg2 If ElementID = xlLegendEntry Then If .SeriesCollection(Arg1).Format.Line.Visible = msoTrue Then .SeriesCollection(Arg1).Format.Line.Visible = msoFalse ElseIf .SeriesCollection(Arg1).Format.Line.Visible = msoFalse Then .SeriesCollection(Arg1).Format.Line.Visible = msoTrue End If .ClearToMatchStyle End If End With End Sub 

.GetChartElement x, y, ElementID, Arg1, Arg2 Arg2从鼠标单击位置x,y 获取 ElementIDArg1Arg2

在默认模块中input以下代码:

 Dim myChartWithEvents As clsChartEvents Sub init() Set myChartWithEvents = New clsChartEvents Set oChart = ThisWorkbook.Worksheets(1).ChartObjects(1).Chart Set myChartWithEvents.myChart = oChart End Sub 

现在运行sub init并单击图例条目。

点击图例条目应该打开/closures相应的线路。

作为一个简单的解决方法,您可以在图例上绘制矩形。 你可以格式化那个没有内部和没有线条的矩形使它不可见,甚至可以组合图表和矩形,以便两者可以一起移动。

然后你可以把那个矩形连接到你的macros。 在你的macros中,你不能使用“ActiveChart”,但必须用名称或ID标识正确的图表。 希望这可以帮助。