Как скопировать диаграммы с одного листа на другой или установить пункт назначения диаграммы? - PullRequest
0 голосов
/ 23 марта 2020

Итак, мой код работает так, что он строит диаграмму на основе значений X в столбце A, а столбцы y представляют собой чередующиеся столбцы (например, средний график значений x = весь столбец1, значения y = весь столбец 2,4,6. .et c, сигма-график x значения = весь столбец1, y значения = весь столбец 3,5,7 ..).

Все мои графики построены на тех же рабочих листах («данные»), но я нахожу это должно быть очень грязно. Я попытался скопировать и вставить все свои диаграммы в различные рабочие листы, а именно в сигмаграфы и средние диаграммы, но он копирует и вставляет только часть средних диаграмм (не уверен, где это пошло не так). Итак, что я могу сделать, чтобы убедиться, что все мои графики в данных копируются и вставляются в соответствии с различными рабочими листами, или можно просто установить назначение диаграмм от начала до сигмаграфов рабочего листа и средних графиков?

В любом случае, я не включил код для сигмаграфов, потому что код будет слишком длинным, но код почти такой же, как и код средних графов с Set rngY = rngDB.Columns (3) и различными осями.

enter image description here

Sub plotgraphs()

Call meangraph
Call sigmagraph

End Sub

Private Sub meangraph()
    Dim i As Long, c As Long
    Dim shp As Shape
    Dim Cht As chart, co As Shape
    Dim rngDB As Range, rngX As Range, rngY As Range
    Dim Srs As Series
    Dim ws As Worksheet

    Set ws = Sheets("Data")

    Set rngDB = ws.Range("A1").CurrentRegion

    Set rngX = rngDB.Columns(1)
    Set rngY = rngDB.Columns(2)

    Do While Application.CountA(rngY) > 0

        Set co = ws.Shapes.AddChart
        Set Cht = co.chart

        With Cht
            .ChartType = xlXYScatter
            'remove any data which might have been
            '  picked up when adding the chart
            Do While .SeriesCollection.Count > 0
                .SeriesCollection(1).Delete
            Loop
            'add the data
            With .SeriesCollection.NewSeries()
                .XValues = rngX.Value
                .Values = rngY.Value
            End With
            'formatting...
            With Cht.Axes(xlValue)
                .MinimumScale = 5
                .MaximumScale = 20
                .TickLabels.NumberFormat = "0.00E+00"
            End With
            Cht.Axes(xlCategory, xlPrimary).HasTitle = True
            Cht.Axes(xlValue, xlPrimary).HasTitle = True
        End With
          Set rngY = rngY.Offset(0, 2) 'next y values

    Loop




              Dim OutSht As Worksheet
'
   Dim PlaceInRange As Range

    Set OutSht = ActiveWorkbook.Sheets("sigmagraphs") '<~~ Output sheet
   Set PlaceInRange = OutSht.Range("B2:J21")        '<~~ Output location
'


'    To place charts at a distance between them
    For Each chart In Sheets("sigmagraphs").ChartObjects
'        OutSht.Paste PlaceInRange
'        Code below changes the range itself to something 20 rows below
        Set PlaceInRange = PlaceInRange.Offset(20, 0)
   Next chart

End Sub

Ожидаемый результат (если графики отсортированы по названию таблицы)

enter image description here

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