我尝试构建一个交互式图表来表示数据集。在下面的截图中,如果我们选择不同的按钮,我们可以为图表选择不同的数据系列。我的问题是通过使用下面的代码如果系列1是真的那么我能够获得myX和myY的值...对于其他选择的系列我只会得到空白。
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文件中发生的情况。
答案 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在已过滤数据的图表上破坏现有的图表解决方案。