2016-08-22 3 views
0

Я создал макрос в PowerPoint, который открывает книгу Excel, просматривает листы в книге, создает диаграммы PowerPoint и заполняет их данными из листов Excel. Просто для того, чтобы было ясно, макрос запускается из PowerPoint.Как перенести данные из Excel в рабочий лист PowerPoint и обновить диапазон диаграмм PowerPoint?

Теперь у меня есть необходимость в создании диапазонов данных (при переходе с Excel на рабочие листы Powerpoint) и динамических диапазонах диаграмм PowerPoint. Например. потому что каждый диапазон рабочих листов Excel не является одинаковым, и поэтому каждый диапазон данных диаграммы PowerPoint не совпадает.

Ниже мой макрос:

Sub CreateChartAllWKsv3() 

    'Create variables 
     Dim myChart As Chart 
     Dim pptChartData As ChartData 
     Dim pptWorkBook As Excel.Workbook 
     Dim pptWorkSheet As Excel.Worksheet 
     Dim xlApp As Excel.Application 
     Dim xlWB As Workbook 
     Dim xlWS As Worksheet 
     Dim CurSlide As Slide 'new from update 
     Dim LastRow As Long ' 8/22 
     Dim LastColumn As Long ' 8/22 

    ' Create new excel instance and open relevant workbook 
     Set xlApp = New Excel.Application 
     xlApp.Visible = True 'Make Excel visable 
     Set xlWB = xlApp.Workbooks.Open("C:\ExcelWorkbook.xlsm", True, False) 'Open relevant workbook 

    'Loop through each worksheet in xlWB and transfer data to new pptWorkBook and 
    'create new PowerPoint chart 
      For Each xlWS In xlWB.Worksheets 

        'Add a new slide where we will create the PowerPoint worksheet and chart        
          Set CurSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, ppLayoutText) 
          ActiveWindow.View.GotoSlide ActivePresentation.Slides.Count 
        ' Create the chart and set a reference to the chart data. 
          Set myChart = CurSlide.Shapes.AddChart.Chart 'changed 8/19 
          Set pptChartData = myChart.ChartData 

        ' Set the PowerPoint Workbook and Worksheet references. 
          Set pptWorkBook = pptChartData.Workbook 
          Set pptWorkSheet = pptWorkBook.Worksheets("Sheet1") 
        'Clear contents from PowerPoint worksheet 
          pptWorkSheet.UsedRange.ClearContents 'Works 
        'Find Last Row and Column of xlWS 
          LastRow = xlWS.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row 
          LastColumn = xlWS.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Column 
        ' Add the data to the PowerPoint workbook. 
          xlWS.Range(Cells(1, 1), xlWS.Cells(LastRow, LastColumn)).Copy 'Fails to past any data on the second worksheet 
          pptWorkSheet.Range("A1").PasteSpecial Paste:=xlPasteValues 
        ' Update PowerPoint workbook chart data reference. 
          'line below didn't work        
          pptWorkSheet.ListObjects("Table1").Resize pptWorkSheet.Range("Table1[#All]").Resize(Rows.Count, Columns.Count) 

        ' Apply styles to the chart. 
          With myChart 
            .ChartStyle = 4 
            .ApplyLayout 4 
            .ClearToMatchStyle 
          End With 

        ' Add the axis title. 
          With myChart.Axes(xlValue) 
            .HasTitle = True 
            .AxisTitle.Text = "Units" 
          End With 

        'Apply data labels 
          myChart.ApplyDataLabels 
     Next xlWS 

    ' Clean up the references. 
      Set pptWorkSheet = Nothing 
    ' pptWorkBook.Application.Quit 
      Set pptWorkBook = Nothing 
      Set pptChartData = Nothing 
      Set myChart = Nothing 
    'Clean up Excel references. 
      Set xlApp = Nothing 
    'Option to close excel workbook 
      xlWB.Close 
      'Option to close the excel application 
    End Sub 

Я бегу на 2 вопроса:

  1. xlWS.Range(Cells(1, 1), xlWS.Cells(LastRow, LastColumn)).Copy и pptWorkSheet.Range("A1").PasteSpecial Paste:=xlPasteValues передачи данных до первого листа PowerPoint, но не на втором - ничего не приклеивается ,
  2. pptWorkSheet.ListObjects("Table1").Resize pptWorkSheet.Range("Table1[#All]").Resize(Rows.Count, Columns.Count) не может изменить размер диапазона диаграмм PowerPoint на рабочем листе PowerPoint. Я получаю ошибку method failed.

EDIT Мой обходной путь для первого номера, чтобы просто передать большой диапазон, что мои данные никогда не будет больше, чем при использовании pptWorkSheet.Range("a1:z100").Value = xlWS.Range("a1:z100").Value.

ответ

0

Извините, но у меня недостаточно репутации, чтобы добавить комментарий.

Есть ли причина, по которой он не может использовать связанные данные?

В настоящее время у меня есть показания PowerPoint, которые используют данные excel и просто привязывают его к тому, чтобы вытащить самую последнюю информацию, когда я выбираю ссылки обновления на открытом.

Thanks

+0

К сожалению, графики должны быть созданы в PowerPoint с использованием рабочих листов PowerPoint и т. Д. – RTrain3k