Переключить серию на диаграмме с помощью VBA

Доброе утро люди,

Я хочу переключить серию диаграмм с помощью VBA и пользовательской формы для выбора конкретной серии, у меня был успех с линейной диаграммой. Однако, когда я пытаюсь использовать гистограмму, кажется, что она не обновляет данные, а только легенду.

Код VBA, который я использую:

Модуль:

Option Explicit
Sub ChartContent() 'Excel VBA process to select the chart and show the userform.
ActiveSheet.ChartObjects.Select 
ufChart.Show 

End Sub

Пользовательская форма:

Option Explicit

Private Sub cmdApply_Click()
    Dim iSres As Integer
    Application.ScreenUpdating = False

    With ActiveChart
        .HasLegend = False
        .HasLegend = True
        For iSres = .SeriesCollection.Count To 1 Step -1
            If ListBox1.Selected(iSres - 1) Then
                .SeriesCollection(iSres).Border.LineStyle = xlAutomatic
                .SeriesCollection(iSres).MarkerStyle = xlAutomatic
            Else
                .SeriesCollection(iSres).Border.LineStyle = xlNone
                .SeriesCollection(iSres).MarkerStyle = xlNone
                .Legend.LegendEntries(iSres).Delete
            End If
        Next
        .Deselect
    End With
    Unload Me
End Sub

Private Sub cmdCancel_Click()
  Unload Me
End Sub

Private Sub ListBox1_Click()

End Sub

Private Sub UserForm_Initialize()
    Dim iSres As Integer

    With ActiveChart
        For iSres = 1 To .SeriesCollection.Count
            ListBox1.AddItem .SeriesCollection(iSres).Name
            ListBox1.Selected(ListBox1.ListCount - 1) = Not (.SeriesCollection(iSres).Border.LineStyle = xlNone)
        Next
    End With

End Sub

У кого-нибудь есть предложения о том, почему это может происходить, и возможные решения, чтобы я мог применить этот VBA к гистограмме, я не совсем уверен, почему он не обновляется с помощью гистограммы.

Большое спасибо,


person Kristianwalker1993    schedule 18.04.2018    source источник


Ответы (2)


Исправлено это путем замены некоторого кода, если требуется гистограмма, используйте это:

 With ActiveChart
        .HasLegend = False
        .HasLegend = True
        For iSres = .SeriesCollection.Count To 1 Step -1
            If ListBox1.Selected(iSres - 1) Then
                .SeriesCollection(iSres).fill.Visible = msoTrue
                .SeriesCollection(iSres).MarkerStyle = xlAutomatic
            Else
                .SeriesCollection(iSres).fill.Visible = msoFalse
                .SeriesCollection(iSres).MarkerStyle = xlNone
                .Legend.LegendEntries(iSres).Delete
            End If
        Next
        .Deselect
    End With
    Unload Me
End Sub
person Kristianwalker1993    schedule 18.04.2018

Если вы используете Excel 2013 или 2016, вы можете легко отфильтровать серию без VBA. Выберите диаграмму и нажмите на самый нижний из трех «кеглей» рядом с диаграммой. Появится всплывающее окно фильтра с флажками для каждой серии на диаграмме. Снимите флажок и нажмите «Применить», чтобы скрыть серию, затем установите ее, чтобы она снова появилась.

Фильтрация серий на диаграмме

person Jon Peltier    schedule 22.04.2018