VBA L oop с помощью графиков, устанавливающих тип диаграммы (xlLine), вес серии, цвета серии, условные обозначения диаграммы (вниз), высоту и ширину диаграммы - PullRequest
0 голосов
/ 20 марта 2020

Я постоянно испытываю ошибки при попытке сделать макрос для форматирования моего графика. То, что я хочу сделать, это следующее: L oop через листы и графики, устанавливающие тип диаграммы (xlLine), вес серии, цвета серии, условные обозначения диаграммы (вниз), высота и ширина диаграммы.

Я пытаюсь использовать следующий код:

Sub LoopThroughCharts()

Dim sht As Worksheet
Dim CurrentSheet As Worksheet
Dim cht As ChartObject

Application.ScreenUpdating = False
Application.EnableEvents = False

Set CurrentSheet = ActiveSheet

For Each sht In ActiveWorkbook.Worksheets
  For Each cht In sht.ChartObjects
    cht.Activate

    ActiveChart.ChartType = xlLine


  ActiveChart.SeriesCollection(1).Select
With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(214, 198, 138)
    .Weight = 1.5

  ActiveChart.SeriesCollection(2).Select
With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(5, 34, 61)
    .Weight = 1.5
End With

 Next cht
Next sht

CurrentSheet.Activate
Application.EnableEvents = True

End Sub

В настоящее время я получаю ошибку компиляции «Next cht» в конце кода, и первая строка «Sub LoopThroughCharts ()» становится желтой.

Любое предложение о том, как преодолеть эту ошибку?

Кроме того, в более раннем состоянии казалось, что она останавливается на ActiveChart.SeriesCollection(2).Select

И, похоже, потому что некоторые диаграммы имели только 1 серию. У вас есть предложение, как это преодолеть, так как в какой-то момент я проведу oop через другую книгу с множеством диаграмм с различным количеством серий.

Только что начал изучать кодирование VBA.

1 Ответ

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

Не делайте этого:

  cht.Activate

Вы можете работать напрямую с cht, не активируя его.

Например, вместо этого:

  ActiveChart.SeriesCollection(1).Select
  With Selection.Format.Line

используйте это:

  With cht.Chart.SeriesCollection(1).Format.Line '<< EDIT added Chart

Проверено:

Sub LoopThroughCht()

    Dim sht As Worksheet
    Dim co As ChartObject, cht As Chart

    Application.ScreenUpdating = False

    For Each sht In ActiveWorkbook.Worksheets
        For Each co In sht.ChartObjects

            Set cht = co.Chart
            cht.ChartType = xlLine

            With cht.SeriesCollection(1).Format.Line
                .Visible = msoTrue
                .ForeColor.RGB = RGB(214, 198, 138)
                .Weight = 1.5
            End With

            If cht.SeriesCollection.Count > 1 Then
                With cht.SeriesCollection(2).Format.Line
                    .Visible = msoTrue
                    .ForeColor.RGB = RGB(5, 34, 61)
                    .Weight = 1.5
                End With
            End If

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