Форматирование легенды диаграммы с использованием (синтаксис) - PullRequest
0 голосов
/ 06 мая 2019

У меня есть макрос, который добавляет и удаляет (filterseries) набор последовательностей данных диаграммы (на своем собственном листе), просматривая флажки на отдельном листе. Когда я добавляю и удаляю их, я хочу выключить и снова включить легенду, чтобы она автоматически изменяла размеры.

Я думаю, что это просто синтаксическая ошибка того, как я использую оператор with.

У меня есть отдельный макрос, который делает это для другой цели, но он перебирает таблицы диаграмм и обрабатывает их как переменные, и по какой-то причине он там работает.

Sub ISurfSeries1Checklist()

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Dim i As Integer
    Dim c As Integer
    For i = 1 To 56
        If ActiveWorkbook.Sheets("Range").Cells(3 + i, 12).Value = True Then
        ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(i).IsFiltered = False

        Else 'ActiveWorkbook.Sheets("Range").Cells(3 + i, 12) = False Then

        ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(i).IsFiltered = True

        End If
    Next i

    For c = 51 To 56 'ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection.Count

    ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(c).Format.Line.Visible = msoTrue
    ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(c).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
    ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(c).Format.Line.Transparency = 0

    Next c

    ActiveWorkbook.Charts("I. Surf (1)").HasLegend = False
    ActiveWorkbook.Charts("I. Surf (1)").HasLegend = True

    '***Below is where it stops working.***
    With ActiveWorkbook.Charts("I.Surf (1)").Legend
        .Font.Size = 8
        .Border.Weight = xlHairline
        .Border.Color = RGB(89, 89, 89)
        .Interior.Color = RGB(255, 255, 255)
        .Left = Cht_Sht.PlotArea.InsideLeft - Cht_Sht.Axes(xlValue).Format.Line.Weight
        .Top = Cht_Sht.PlotArea.InsideTop
   End With

1 Ответ

0 голосов
/ 07 мая 2019

Ошибка выполнения «9». Индекс вне диапазона
на With заявление: With ActiveWorkbook.Charts("I.Surf (1)").Legend

Это означает, что диаграмма с именем "I.Surf (1)" не существует, возможно, вам не хватает пробела между точкой и Surf. Это должно быть "I. Surf (1)".

Я рекомендую ссылаться на диаграмму по переменной, поэтому вам нужно использовать ее имя только один раз. Кодовое правило № 1: Не повторяйся.

Dim ActChart As Chart
Set ActChart = ActiveWorkbook.Charts("I. Surf (1)")

Это предотвращает опечатки, и если вам нужно изменить их, вам нужно всего лишь изменить их в одной позиции:

Sub ISurfSeries1Checklist()
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Dim ActChart As Chart
    Set ActChart = ActiveWorkbook.Charts("I. Surf (1)")

    Dim i As Long
    For i = 1 To 56
        'Note that you can shorten this to:
        ActChart.FullSeriesCollection(i).IsFiltered = Not (ActiveWorkbook.Sheets("Range").Cells(3 + i, 12).Value = True)
    Next i

    Dim c As Long
    For c = 51 To 56 'ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection.Count
        With ActChart.FullSeriesCollection(c).Format.Line
            .Visible = msoTrue
            .ForeColor.RGB = RGB(255, 0, 0)
            .Transparency = 0
        End With
    Next c

    ActChart.HasLegend = False
    ActChart.HasLegend = True

    With ActChart.Legend
        .Font.Size = 8
        .Border.Weight = xlHairline
        .Border.Color = RGB(89, 89, 89)
        .Interior.Color = RGB(255, 255, 255)
        .Left = Cht_Sht.PlotArea.InsideLeft - Cht_Sht.Axes(xlValue).Format.Line.Weight
        .Top = Cht_Sht.PlotArea.InsideTop
   End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...