Прокручивать листы, создавая графики - PullRequest
1 голос
/ 25 марта 2019

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

Я попробовал цикл с sh.activate, который закончился созданием графика с данными из рабочего листа1 во всех рабочих листах.После этого я попытался создать внешний вид без .activate его не работает, хотя это правильный способ сделать это?

Sub graph()
    Dim ws As Worksheet
    Dim chrt As Chart
    Dim StartCell As Range

    For Each ws In Worksheets
        Set StartCell = .Range("e1")
        Set chrt = .Shapes.AddChart.Chart

        With chrt
            .SetSourceData Source:=Range("$C$1:$D$11")
            .ChartType = xlLine

            .SeriesCollection(1).Name = .Range("$F$1")
            .SeriesCollection(1).XValues = .Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
            .SeriesCollection(1).Values = .Range("E2:E" & Range("E" & Rows.Count).End(xlUp).Row)
            .SeriesCollection(2).Name = .Range("$E$1")
            .SeriesCollection(2).XValues = .Range("E2:E" & Range("E" & Rows.Count).End(xlUp).Row)
            .SeriesCollection(2).Values = .Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)

            .HasTitle = True
            .ChartTitle.Characters.Text = "Effektivitet"
        End With
    Next ws
End Sub

1 Ответ

4 голосов
/ 25 марта 2019

Вам необходимо определить, на каком листе находятся эти Range и Shape объекты. Например,

Set StartCell = .Range("e1")
Set chrt = .Shapes.AddChart.Chart

определить ws как рабочий лист:

Set StartCell = ws.Range("e1")
Set chrt = ws.Shapes.AddChart.Chart

Обратите внимание, что операторы могут начинаться с точки .Range, только если они находятся внутри оператора With. Таким образом, вышесказанное совпадает со следующим:

With ws
    Set StartCell = .Range("e1")
    Set chrt = .Shapes.AddChart.Chart
End With

Вам также нужно проверить другие объекты диапазона, потому что они начинаются как .Range("$F$1"), они ссылаются на With chrt, который является объектом диаграммы, но они должны ссылаться на ws.Range("$F$1").

Таким образом, вы должны получить что-то вроде:

Option Explicit

Public Sub graph()
    Dim ws As Worksheet
    Dim chrt As Chart
    Dim StartCell As Range

    For Each ws In Worksheets
        Set StartCell = ws.Range("e1")
        Set chrt = ws.Shapes.AddChart.Chart

        With chrt
            .SetSourceData Source:=ws.Range("$C$1:$D$11")
            .ChartType = xlLine

            .SeriesCollection(1).Name = ws.Range("$F$1")
            .SeriesCollection(1).XValues = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
            .SeriesCollection(1).Values = ws.Range("E2:E" & ws.Range("E" & ws.Rows.Count).End(xlUp).Row)
            .SeriesCollection(2).Name = ws.Range("$E$1")
            .SeriesCollection(2).XValues = ws.Range("E2:E" & ws.Range("E" & ws.Rows.Count).End(xlUp).Row)
            .SeriesCollection(2).Values = ws.Range("F2:F" & ws.Range("F" & ws.Rows.Count).End(xlUp).Row)

            .HasTitle = True
            .ChartTitle.Characters.Text = "Effektivitet"
        End With
    Next ws
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...