Замена несмежного диапазона столбцов на диапазон смещения столбцов в Chart SeriesCollection - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть Clustered Bar Chart, который подается Values из B column из Listobject Table. A Column для XValues. Этот объект ListObject может быть отфильтрован с помощью dropdown selection для отображения только определенных видимых строк.

Событие On Workbook_SheetChange, для Sheet1,

Если в раскрывающемся меню выбрано «Aggr», то 3 аргументом SeriesCollection должен стать

=SERIES("Aggr",(Sheet1!$A$2:$A$4,Sheet1!$A$6:$A$10),(Sheet1!$B$2:$B$4,Sheet1!$B$6:$B$10),1)

, т. е. выбрать несмежные области диапазона из столбца B.

Если в раскрывающемся списке выбрано «Core», то третий аргумент SeriesCollection должен стать следующим:

=SERIES("Core",(Sheet1!$A$2:$A$4,Sheet1!$A$6:$A$10),(Sheet1!$D$2:$D$4,Sheet1!$D$6:$D$10),1)

, т.е. выберите несмежные области диапазонов из столбца D и наоборот.

Мне нужна функция VBA, которая может обрабатывать диапазоны contiguous и non-contiguous. Я написал нижеприведенный пример, который работает только для смежных диапазонов, например

=SERIES("Aggr",Sheet1!$A$2:$A$10,Sheet1!$B$2:$B$10,1) ' for Aggr

и

=SERIES("Core",Sheet1!$A$2:$A$10,Sheet1!$D$2:$D$10,1) ' for Core

Вот код, который работает, если seriesCollection такой, как показано выше для смежных диапазонов.

Select Case Target.Value2
Case is = "Aggr"  'selected Aggr in dropdown
    For Each Srs In oChart.SeriesCollection
        If Srs.Name = "Core" Then
            Var = Split(Srs.Formula, ",")
            Set Rng = ThisWorkbook.Sheets("Sheet1").Range(Var(2)).Offset(0, -2)
            Var(2) = Trim("'" & Mid(Rng.Address(True, True, xlA1, True), InStr(1, Rng.Address(True, True, xlA1, True), "]", vbTextCompare) + 1))
            With Srs
                .Formula = Join(Var, ",")
                .Name = "Aggr"
            End With
            Exit For
        End If
    Next Srs
    Target.Select

Case is = "Core"  'selected Core in dropdown
    For Each Srs In oChart.SeriesCollection
        If Srs.Name = "Aggr" Then
            Var = Split(Srs.Formula, ",")
            Set Rng = ThisWorkbook.Sheets("Sheet1").Range(Var(2)).Offset(0, 2)
            Var(2) = Trim("'" & Mid(Rng.Address(True, True, xlA1, True), InStr(1, Rng.Address(True, True, xlA1, True), "]", vbTextCompare) + 1))
            With Srs
                .Formula = Join(Var, ",")
                .Name = "Core"
            End With
            Exit For
        End If
    Next Srs
    Target.Select
End Select

Как можно изменить этот код для обработки 2 или более несмежных диапазонов?

...