Return 所选系列的索引
Return index of selected series
有没有一种简单的方法可以使用 VBA 在 Excel 图表中获取 selected 线的索引?我有一个图表,其中用户 select 是一个系列。然后宏应该做一些事情。我正在寻找类似 idx = Selection.getIndex
.
的内容
我需要这个 idx 来调用其他函数,这些函数使用 select 特定系列的索引对系列做一些事情(例如 FullSeriesCollection(idx).DataLabels.labelPos=...
)
给你的三个想法:
1st- 使用对象变量而不是索引引用:
Dim SER As Series
Set SER = Selection
SER.anyproperty.anymethod... 'do your action here
2nd- 使用绘图顺序获取...索引(但不确定这是否始终匹配)?
Dim inxSer As Integer
inxSer = Selection.PlotOrder
3rd-读取级数公式的最后一个参数
Dim inxFromFormula As Integer
Dim tmpSerFormula As String
tmpSerFormula = Selection.Formula
tmpSerFormula = Mid(tmpSerFormula, InStrRev(tmpSerFormula, ",") + 1)
inxFromFormula = Left(tmpSerFormula, Len(tmpSerFormula) - 1)
您可以利用图表对象事件来实现这一点。如果图表嵌入在 sheet 中,您需要先将其声明为 'WithEvents' 变量,如下所述:
Using Events with Embedded Charts
之后,您可以使用以下参数定义 SeriesChange 处理程序:
Private Sub myChartClass_SeriesChange(ByVal SeriesIndex As Long, ByVal PointIndex As Long)
End Sub
编辑:当用户更改点值时会触发上述事件,您应该改用 Select 事件。
myChartClass_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
有没有一种简单的方法可以使用 VBA 在 Excel 图表中获取 selected 线的索引?我有一个图表,其中用户 select 是一个系列。然后宏应该做一些事情。我正在寻找类似 idx = Selection.getIndex
.
我需要这个 idx 来调用其他函数,这些函数使用 select 特定系列的索引对系列做一些事情(例如 FullSeriesCollection(idx).DataLabels.labelPos=...
)
给你的三个想法:
1st- 使用对象变量而不是索引引用:
Dim SER As Series
Set SER = Selection
SER.anyproperty.anymethod... 'do your action here
2nd- 使用绘图顺序获取...索引(但不确定这是否始终匹配)?
Dim inxSer As Integer
inxSer = Selection.PlotOrder
3rd-读取级数公式的最后一个参数
Dim inxFromFormula As Integer
Dim tmpSerFormula As String
tmpSerFormula = Selection.Formula
tmpSerFormula = Mid(tmpSerFormula, InStrRev(tmpSerFormula, ",") + 1)
inxFromFormula = Left(tmpSerFormula, Len(tmpSerFormula) - 1)
您可以利用图表对象事件来实现这一点。如果图表嵌入在 sheet 中,您需要先将其声明为 'WithEvents' 变量,如下所述: Using Events with Embedded Charts
之后,您可以使用以下参数定义 SeriesChange 处理程序:
Private Sub myChartClass_SeriesChange(ByVal SeriesIndex As Long, ByVal PointIndex As Long)
End Sub
编辑:当用户更改点值时会触发上述事件,您应该改用 Select 事件。
myChartClass_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)