VBA Excel 2010 - 选择图表图例时运行代码

时间:2016-03-15 11:35:36

标签: excel vba excel-vba charts

目前我正在尝试做什么,我不知道它是否有可能,我甚至不知道从哪里开始(我已经尝试this code但我无法让它甚至工作)。

我试图让一个宏在点击图表的图例时自动运行,我知道你可以为图表指定一个宏来运行它们但是如果可能的话我想从图表图例中做到这一点。我想要运行的代码如下,它是一个简单的切换来打开/关闭图表线

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行等),希望这澄清它

2 个答案:

答案 0 :(得分:1)

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

然后您可以将该矩形链接到您的宏。在您的宏中,您无法使用“ActiveChart”#39;但必须使用名称或ID识别正确的图表。希望这会有所帮助。

答案 1 :(得分:1)

假设您将嵌入的图表对象作为第一个工作表中的第一个图表对象。

我在Sheet1中有以下内容: enter image description here

创建一个类模块。将其命名为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 从鼠标点击位置x,y获得<{1}},ElementIDArg1

在默认模块中输入以下代码:

Arg2

现在运行子Dim myChartWithEvents As clsChartEvents Sub init() Set myChartWithEvents = New clsChartEvents Set oChart = ThisWorkbook.Worksheets(1).ChartObjects(1).Chart Set myChartWithEvents.myChart = oChart End Sub 并单击图例条目。

单击图例条目应该打开/关闭相应的行。