Как скопировать и вставить диаграмму Excel в слайд PowerPoint с помощью VBA? - PullRequest
0 голосов
/ 18 июня 2020

Я знаю, что этот вопрос задавался раньше, но у меня возникли проблемы с копированием / вставкой диаграммы Excel в слайд PowerPoint. Вот код, который у меня есть.

'There is a bunch of other stuff that's defined. Just showing what I think are relevant definitions
Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim shp As PowerPoint.Shape
Dim sld As PowerPoint.Slide
Dim xlChrt As Excel.ChartObject

Set pptApp = CreateObject("PowerPoint.Application")
Set ppPres = pptApp.Presentations.Open(myPath & pptFile) 'This opens up my PowerPoint file

Workbooks(wb2).Sheets("Sheet 1").Activate 'This activates the worksheet where my chart is
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.ChartArea.Copy

'I think that my copying works because after I run the module, I have the chart in my clipboard. 

'This takes me to slide 2 of my PowerPoint. 
Set sld = pptPres.Slides(2) 

sld.Shapes.Paste 'But nothing pastes to the slide

Как я уже упоминал, я вполне уверен, что успешно копирую диаграмму, потому что она находится в моем буфере обмена после запуска модуля. Однако, что бы я ни пытался, мне НЕ удается вставить его в слайд PowerPoint.

Я тоже думаю, что успешно ссылаюсь на слайд PowerPoint. Позже в коде я go перехожу к редактированию текстовых полей на слайде 2, и это отлично работает. Это просто вставка, с которой у меня проблема.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 18 июня 2020

Я считаю, что ваш код должен работать, если вы исправите оператор set pptPres. Этот пример представляет собой упрощенный пример, основанный на вашем коде:

Option Explicit

Public Sub CopyChart()

    Const myPath = "c:\temp\"
    Const pptFile = "test.pptx"

    Dim pptApp As New PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim sld As PowerPoint.Slide

    ' Open the PowerPoint and reference the slide
    Set pptPres = pptApp.Presentations.Open(myPath & pptFile)
    Set sld = pptPres.Slides(2)

    ' Copy the Chart
    ActiveWorkbook.Sheets("Sheet 1").ChartObjects("Chart 1").Copy

    ' Paste it into the PowerPoint
    sld.Shapes.Paste

End Sub

И результат ... вы можете увидеть диаграмму, вставленную на слайд 2:

screencopy

ОБНОВЛЕННЫЙ ОТВЕТ

Диаграммы не так функциональны, как встроенные диаграммы: https://docs.microsoft.com/en-us/office/vba/api/excel.chart (объект)

Здесь - это один из вариантов, который представляет собой небольшую вариацию вышеуказанного, который работает для таблиц:

Option Explicit

Public Sub CopyChartSheet()

    Const myPath = "c:\temp\"
    Const pptFile = "test.pptx"

    Dim pptApp As New PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim myChart As Excel.Chart

    Dim sld As PowerPoint.Slide

    ' Open the PowerPoint and reference the slide
    Set pptPres = pptApp.Presentations.Open(myPath & pptFile)
    Set sld = pptPres.Slides(2)

    ' Copy the Chart
    Set myChart = ActiveWorkbook.Charts("Chart 1")
    myChart.CopyPicture

    ' Paste it into the PowerPoint
    sld.Shapes.Paste

End Sub

screen2

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