Копирование диаграммы vba с одного листа на другой.(хотите использовать ссылку на индекс листа вместо имени) - PullRequest
1 голос
/ 21 мая 2019

Я новичок в VBA.Я создал диаграмму столбцов на листе 1 и хочу переместить ее на лист 2.

Я пытаюсь использовать индекс листа в качестве справочного, но не конкретные имена.

Я пришелс некоторыми кодами и частью, начинающейся с activesheet.chartobjects.select (6-ая последняя строка), где начинаются проблемы ...

Пожалуйста, помогите, и я действительно ценю помощь и доброту здесь.

Option Explicit

Sub createClusteredBarChart()
    Dim myworksheet As Worksheet
    Dim mysourcedata As Range
    Dim mychart As Chart
    Dim mychartdestination As Range

    Set myworksheet = ThisWorkbook.Worksheets("sales figures")

    With myworksheet
        Set mysourcedata = .Range("a1:f6")

        Set mychartdestination = .Range("A2:z10")

        Set mychart = .Shapes.AddChart(XlChartType:=xlColumnClustered, _
            Left:=mychartdestination.Cells(1).Left, Top:=mychartdestination.Cells(1).Top, _
            Width:=mychartdestination.Width, Height:=mychartdestination.Height).Chart

        With mychart
            .Axes(xlValue).MaximumScale = 16000000
            .Axes(xlValue).MajorUnit = 4000000
            .ChartArea.Select
            .ChartArea.Height = 216
            .ChartArea.Width = 360
            .ChartGroups(1).GapWidth = 65 
        End With

        ActiveSheet.ChartObjects.Select
        ActiveSheet.ChartObjects.Copy
        Sheets("Sheet18").Range("a1").Paste
    End With

    mychart.SetSourceData Source:=mysourcedata    
End Sub

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Попробуйте этот код

Примечания:

  1. Прочитать комментарии кода
  2. Убедитесь, что я изменил порядок строк, чтобы сделать «С объектами» более читабельным

Option Explicit
Sub createClusteredBarChart()

    ' Declare objects
    Dim myworksheet As Worksheet
    Dim mysourcedata As Range
    Dim mychart As Chart
    Dim mychartdestination As Range

    ' Set source worksheet
    Set myworksheet = ThisWorkbook.Worksheets("sales figures")

    With myworksheet
        ' Set source data
        Set mysourcedata = .Range("a1:f6")

        ' Set destination range
        Set mychartdestination = .Range("A2:z10")

        ' Create blank chart
        Set mychart = .Shapes.AddChart(XlChartType:=xlColumnClustered, _
        Left:=mychartdestination.Cells(1).Left, Top:=mychartdestination.Cells(1).Top, _
        Width:=mychartdestination.Width, Height:=mychartdestination.Height).Chart
    End With

    ' Adjust chart's settings
    With mychart
        .Axes(xlValue).MaximumScale = 16000000
        .Axes(xlValue).MajorUnit = 4000000
        .ChartArea.Select
        .ChartArea.Height = 216
        .ChartArea.Width = 360
        .ChartGroups(1).GapWidth = 65

        ' Set chart's source data
        .SetSourceData Source:=mysourcedata

    End With

    ' This line will move the chart to another worksheet (in this example sheet index = 2) (be careful when you have hidden sheets)
    mychart.Location xlLocationAsObject, ThisWorkbook.Worksheets(2).Name

End Sub
0 голосов
/ 21 мая 2019

Метод Copy не поддерживается для объектов диаграммы, встроенных в лист, только для листов диаграммы (диаграммы хранятся на собственном листе).Вы должны скопировать его как Shape

Так что замените

    ActiveSheet.ChartObjects.Select
    ActiveSheet.ChartObjects.Copy
    Sheets("Sheet18").Range("a1").Paste

на

   myworksheet.shapes(1).copy  'assuming it's the only object on the sheet
   Sheets("Sheet18").Range("a1").PasteSpecial
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...