如何使用 VBA 引用 Excel 中的 "active/selected" 图表数据点

How to reference "active/selected" chart data point in Excel using VBA

我正在寻找一种使用 VBA.

来引用 Excel 中的 active/selected 图表数据点的方法

假设我有一个折线图,我想在其中添加一个误差线。但是,我不想为整个系列添加误差线,而只想为一个选定的点添加误差线。请参阅下面的屏幕:

我想要做的是添加一个指向 X 轴的垂直误差条,如下所示:

我知道怎么做 Excel,有多种方法,例如,添加一个新的单点系列,然后添加一个错误栏。还有其他方法。我遇到的问题是如何引用 active/selected 数据点。

如果我选择创建一个新的单点系列,我需要知道点数才能做到这一点。我知道(我用过)你可以用 Points object/method 来引用点。遗憾的是,我不知道如何提取选定的点号、坐标等,所以我可以稍后在我的项目中使用它。

我无法添加任何代码,因为我所做的一切都是格式化和使用错误栏,以及遍历现有的所有数据点(代码在这种情况下没有用)。我正在寻找的是选定的点信息,因此我可以将其称为 .Point(x),其中 x 是我之前提取的点编号,而不必像 .Point(8) 那样被迫立即引用点编号(我这样做不知道具体数字,刚点进去的)。

我已经看到了使用图表事件提取它的方法,但这对于我想在我的简单小项目中做的事情来说有点矫枉过正(尤其是如何在其他宏中引用 "extracted" 点, class 模块外)。

有什么想法吗?非常感谢所有帮助,因为在尝试找到引用它的方法 3 天后我迷路了。

要获取索引,可以解析点的Name,格式为:

S<series number>P<point number>

Sub Test()
    If TypeOf Selection Is Point Then        
        Dim p as Point
        Set p = Selection

        Debug.Print CLng(Split(p.Name, "P")(1)) ' this is p's index
    End If
End Sub

要获取有关该点的更多信息,例如 x 和 y 值,也许您可​​以执行以下操作:

Sub Test()
    If TypeOf Selection Is Point Then
        Dim p As Point
        Set p = Selection

        Dim i As Long
        i = CLng(Split(p.Name, "P")(1))

        Dim s As Series
        Set s = p.Parent

        Debug.Print s.Values(i) ' Values is a one-based array so you can use the point index to get its corresponding value
        Debug.Print s.XValues(i)
    End If
End Sub