图表事件 - 超过1个系列数据的代码未获取值

时间:2016-08-11 15:21:03

标签: excel vba excel-vba charts

我尝试构建一个交互式图表来表示数据集。在下面的截图中,如果我们选择不同的按钮,我们可以为图表选择不同的数据系列。我的问题是通过使用下面的代码如果系列1是真的那么我能够获得myX和myY的值...对于其他选择的系列我只会得到空白。

enter image description here

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)

如果选择了系列2或3,则抛出错误参数无效。如果选择系列1,则工作正常。

myX为我提供了所点击国家/地区的名称,myY为该值。

视频链接,查看此Excel文件中发生的情况。

Chart Template Video Youtube

1 个答案:

答案 0 :(得分:1)

愚蠢但是如果我们使用FullSeriesCollection而不是SeriesCollection就可以了。

所以不是行

myX = WorksheetFunction.Index(.SeriesCollection(Arg1).XValues, Arg2)

我必须使用:

myX = WorksheetFunction.Index(.FullSeriesCollection(Arg1).XValues, Arg2)

FullSeriesCollection的文档似乎给出了解释:

  

使用 FullSeriesCollection 对象(Excel)对象,您可以过滤掉Series Object (Excel) object并将其过滤回来。它还可以让您迭代完整的一整套系列对象,以编程方式过滤掉或可见。通过使现有的SeriesCollection Object (Excel)对象仅包含可见系列,您可以以编程方式仅对可见系列执行操作。它还可以防止Microsoft Excel在已过滤数据的图表上破坏现有的图表解决方案。