图表事件 – 值不被代码拾取超过一系列数据
我试图build立一个交互式的图表来表示一组数据。 在下面的截图中,如果我们select不同的button,我们可以为图表select不同的数据系列。 我的问题是,通过使用下面的代码如果系列1是真的只有那么我能够得到myX和myY的值…其他系列select我只得到空白。
Private Sub Chart_MouseUp(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 Dim myX As Variant, myY As Double With ActiveChart .GetChartElement x, y, ElementID, Arg1, Arg2 ' Did we click over a point or data label? If ElementID = xlSeries Or ElementID = xlDataLabel Then On Error Resume Next If Arg2 > 0 Then ' Extract x value from array of x values myX = WorksheetFunction.Index(.SeriesCollection(Arg1).XValues, Arg2) ' Extract y value from array of y values myY = WorksheetFunction.Index _ (.SeriesCollection(Arg1).Values, Arg2) MsgBox myX & ", " & myY
基本上是线路
myX = WorksheetFunction.Index(.SeriesCollection(Arg1).XValues, Arg2)
抛出错误如果select了系列2或3,则参数无效。 如果select系列1,则可以正常工作。
myX给我点击的国家和myY的名称值。
video链接,看看这个Excel文件中发生了什么。
图表模板videoYoutube
傻,但如果我们使用FullSeriesCollection而不是SeriesCollection它的作品。
所以,而不是线路
myX = WorksheetFunction.Index(.SeriesCollection(Arg1).XValues, Arg2)
我必须使用:
myX = WorksheetFunction.Index(.FullSeriesCollection(Arg1).XValues, Arg2)
解释似乎由FullSeriesCollection
的文档FullSeriesCollection
:
FullSeriesCollection
对象(Excel)对象使您能够筛选出Series
对象(Excel)对象,并将其过滤回来。它还使您能够以编程方式遍历整个Series对象集,过滤出或可见对象。 通过使现有的SeriesCollection
对象(Excel)对象仅包含可见的系列,您可以以编程方式仅对可见的系列执行操作。 它还可以防止Microsoft Excel在筛选出的数据中破坏图表上的现有图表解决scheme。