如何使用 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
我正在寻找一种使用 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