Несоответствие при попытке обновить формулу ряда диаграммы - PullRequest
0 голосов
/ 12 марта 2020

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

Private Sub UpdateAnalytics()

Dim CategoryPreview As Range
Dim ChartValues As Variant
Dim ChartXValues As Variant

    With Sheets("Analytics")
    Set CategoryPreview = Range(.Range("A1"), .Range("A1").End(xlDown)).Find("Page 4", LookIn:=xlValues)
    If 1 <> 1 Then
        CategoryPreview.Resize(1, 3).Insert Shift:=xlDown
        CategoryPreview.Resize(1, 3).Copy Destination:=CategoryPreview.Offset(-1, 0)
        CategoryPreview.Offset(-1, 0) = 1
        CategoryPreview.Offset(-1, 1) = 1
    ElseIf 1 = 1 Then
        CategoryPreview.Offset(1, 0).Resize(1, 3).Insert Shift:=xlDown
        CategoryPreview.Resize(1, 3).Copy Destination:=CategoryPreview.Offset(1, 0)
        CategoryPreview.Offset(1, 0) = 2
        CategoryPreview.Offset(1, 1) = 2
    End If

    .Range("AnnualSpent") = "=SUM(" & Range(.Range("B1"), .Range("B1").End(xlDown)).Address & ")"

    'Add new tab to the pie chart
    ChartXValues = Range(.Range("A1"), .Range("A1").End(xlDown))
    ChartValues = Range(.Range("B1"), .Range("B1").End(xlDown))

    .ChartObjects("AnalyticsChart").Activate


       ActiveChart.FullSeriesCollection(1).Select
       Selection.Formula = "=SERIES(,Analytics!" & ChartXValues & ",Analytics!" & ChartValues & ",1)"    <<<<< Mismatch happens here
    End With

End Sub

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Я закончил тем, что получил это

Private Sub UpdateAnalytics()
    Dim CategoryPreview As Range
    Dim ChartValues As String 'Stored as String instead of variant
    Dim ChartXValues As String 'Stored as String instead of variant
    Dim Cht As Chart
    Dim Srs As Series
        With Sheets("Analytics")
            Set CategoryPreview = .Range(.Range("A1"), .Range("A1").End(xlDown)).Find("Page 4", LookIn:=xlValues) '<~~ add period .Range(. range("a1'
            If 1 <> 1 Then
                CategoryPreview.Resize(1, 3).Insert Shift:=xlDown
                CategoryPreview.Resize(1, 3).Copy Destination:=CategoryPreview.Offset(-1, 0)
                CategoryPreview.Offset(-1, 0) = 1
                CategoryPreview.Offset(-1, 1) = 1
            ElseIf 1 = 1 Then
                CategoryPreview.Offset(1, 0).Resize(1, 3).Insert Shift:=xlDown
                CategoryPreview.Resize(1, 3).Copy Destination:=CategoryPreview.Offset(1, 0)
                CategoryPreview.Offset(1, 0) = 2
                CategoryPreview.Offset(1, 1) = 2
            End If

            .Range("AnnualSpent") = "=SUM(" & Range(.Range("B1"), .Range("B1").End(xlDown)).Address & ")"

            'Add new tab to the pie chart
            ChartXValues = .Range(.Range("A1"), .Range("A1").End(xlDown)).Address 'add period, captured address for a dynamic chart
            ChartValues = .Range(.Range("B1"), .Range("B1").End(xlDown)).Address 'add period, captured address for a dynamic chart

            Set Cht = .ChartObjects("AnalyticsChart").Chart
            Set Srs = Cht.SeriesCollection(1)
            Srs.Formula = "=SERIES(,Analytics!" & ChartXValues & ",Analytics!" & ChartValues & ",1)" 'Updated chart via the formula
        End With
End Sub

Хотя я не совсем понимаю, что мне нужно было хранить переменные Cht и Srs, иначе это не сработало бы. Почему хранение диаграммы и серии отличается от использования следующего?

.ChartObjects("AnalyticsChart").SeriesCollection(1).Formula = "=SERIES(,Analytics!" & ChartXValues & ",Analytics!" & ChartValues & ",1)"
0 голосов
/ 13 марта 2020

Попробуйте

Private Sub UpdateAnalytics()

    Dim CategoryPreview As Range
    Dim ChartValues As Variant
    Dim ChartXValues As Variant
    Dim Cht As Chart
    Dim Srs As Series
        With Sheets("Analytics")
            Set CategoryPreview = .Range(.Range("A1"), .Range("A1").End(xlDown)).Find("Page 4", LookIn:=xlValues) '<~~ add period .Range(. range("a1'
            If 1 <> 1 Then
                CategoryPreview.Resize(1, 3).Insert Shift:=xlDown
                CategoryPreview.Resize(1, 3).Copy Destination:=CategoryPreview.Offset(-1, 0)
                CategoryPreview.Offset(-1, 0) = 1
                CategoryPreview.Offset(-1, 1) = 1
            ElseIf 1 = 1 Then
                CategoryPreview.Offset(1, 0).Resize(1, 3).Insert Shift:=xlDown
                CategoryPreview.Resize(1, 3).Copy Destination:=CategoryPreview.Offset(1, 0)
                CategoryPreview.Offset(1, 0) = 2
                CategoryPreview.Offset(1, 1) = 2
            End If

            .Range("AnnualSpent") = "=SUM(" & Range(.Range("B1"), .Range("B1").End(xlDown)).Address & ")"

            'Add new tab to the pie chart
            ChartXValues = .Range(.Range("A1"), .Range("A1").End(xlDown)) ' add period
            ChartValues = .Range(.Range("B1"), .Range("B1").End(xlDown)) 'add period

            '.ChartObjects("AnalyticsChart").Activate

            Set Cht = .ChartObjects("AnalyticsChart").Chart
            Set Srs = Cht.SeriesCollection(1)
            With Srs
                .XValues = ChartXValues
                .Values = ChartValues
            End With
           'Selection.Formula = "=SERIES(,Analytics!" & ChartXValues & ",Analytics!" & ChartValues & ",1)"    <<<<< Mismatch happens here
        End With

End Sub
...