目前我正在尝试做什么,我不知道它是否有可能,我甚至不知道从哪里开始(我已经尝试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行等),希望这澄清它
答案 0 :(得分:1)
作为一种简单的解决方法,您可以在图例上绘制矩形。您可以格式化没有内部的矩形,也不会使其不可见,甚至可以组合图表和矩形,以便两者可以一起移动。
然后您可以将该矩形链接到您的宏。在您的宏中,您无法使用“ActiveChart”#39;但必须使用名称或ID识别正确的图表。希望这会有所帮助。
答案 1 :(得分:1)
假设您将嵌入的图表对象作为第一个工作表中的第一个图表对象。
创建一个类模块。将其命名为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}},ElementID
和Arg1
。
在默认模块中输入以下代码:
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
并单击图例条目。
单击图例条目应该打开/关闭相应的行。