Получить номер активной серии в активном графике - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь сделать довольно простой макрос для активации следующей серии на уже активном графике. (мой основной макрос содержит все вещи для форматирования). Проблема с этим кодированием заключается в том, что я не могу назначить текущий активный ряд (уже выбранный на графике в Excel). В графике с n сериями (SeriesCollection.Count = n) я хочу go от x до x + 1, а если x = ni, хочу go вернуться к серии 1 (так что включение for / next здесь не необходимо, если я заставлю макрос работать как надо).

Sub NextButton_Click()

Dim cht As Chart
Set cht = ActiveChart

If cht Is Nothing Then
MsgBox "Select a chart."
Exit Sub
End If

   With cht

       For SrsIndx = 1 To .SeriesCollection.Count
       .SeriesCollection(SrsIndx).Select
       Next SrsIndx

   End With

End Sub

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Для простых графиков просто используйте PlotOrder: если вы не используете комбинированную диаграмму (т.е. не смешиваете линейные и гистограммы и не используете вторичную ось), то вы можете просто использовать следующий код:

IIF(TypeName(Selection)="Series", Selection.PlotOrder, -1)

Это вернет -1, если у вас не выбрано Series.

Однако, это на самом деле заказ в рамках ChartGroup - условия выше, для случаев, когда на Chart.

.

есть только 1 ChartGroup. В противном случае попробуйте использовать Name и al oop:

Function ActiveSeriesNumber(ThisSeries AS Series) AS Long
    Dim ThisChart AS Chart, TestNumber AS Long
    ActiveSeriesNumber = -1
    On Error GoTo FunctionError

    Set ThisChart = ThisSeries.Parent.Parent 'Object Model Is Chart.ChartGroup.Series
    For TestNumber = 1 to ThisChart.SeriesCollection.Count
        If ThisChart.SeriesCollection(TestNumber).Name = ThisSeries.Name THen
            ActiveSeriesNumber = TestNumber
            Exit Function
        End If
    Next TestNumber

FunctionError:
    On Error GoTo -1
End Function

Используйте это, вызывая ActiveSeriesNumber(Selection)

0 голосов
/ 28 апреля 2020

Вот общая идея. Пройдите через этот код, и вы увидите, что каждая серия выбрана. Вам потребуется добавить некоторую проверку объекта, так как предполагается, что выбранный объект является серией.

Sub CycleSeries ()

Dim MyObject As ChartObject
Dim MyChart As Chart
Dim SerCol As SeriesCollection
Dim SelSeries As Series
Dim indexSeries As Series
Dim ChartSheet As Worksheet
Dim x As Integer

Set ChartSheet = ThisWorkbook.Sheets(1)
Set MyObject = ChartSheet.ChartObjects(1)
Set MyChart = MyObject.Chart
Set SerCol = MyChart.SeriesCollection

Set SelSeries = Excel.Application.Selection

For x = 1 To SerCol.Count
    Set indexSeries = SerCol(x)
    If indexSeries.Name = SelSeries.Name Then
        If (x = SerCol.Count) Then
            Set SelSeries = SerCol(1)
            SelSeries.Select
            Exit For
        Else

            Set SelSeries = SerCol(x + 1)
            SelSeries.Select
            Exit For
        End If



    End If

Next x

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...