Excel для обновления презентации PowerPoint - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть презентация, и я должен обновлять ее каждую неделю.Информация, которую я обновляю, представляет собой набор изображений, которые я генерирую из сводных таблиц Excel (копирование из Excel и вставка непосредственно в PowerPoint).Сегодня я могу сделать это следующим образом:

Set objPPT = CreateObject("PowerPoint.Application")
objPPT.Visible = True

Set PPTPrez = 
objPPT.Presentations.Open("\\network_folder\presentation.pptm")   
Set pSlide = PPTPrez.Slides(2)
If pSlide.Shapes.Count <> 0 Then
ActiveWorkbook.Sheets("Pivot1").Range("A8:Z18").CopyPicture
pSlide.Shapes.Paste  
EndIf

Это работает безупречно ... Но мне нужно немного больше контроля и точности ... Мне нужно выбрать текущее изображение на слайде, удалить его и вставитьновый в том же месте ... У некоторых слайдов есть 3 изображения или более ... Я не могу понять, как правильно сказать VBA, что это за изображение, и выбрать сводную таблицу с правильной информацией для этого изображения... Я даже не знаю, возможно ли это ... Но другое решение, которое я попробовал, - как указать положение и размеры изображения на слайде ... Я могу перед обновлением удалить все изображения ... Вэтот сценарий, как указать размеры и расположение?

Спасибо !!!

Ps .: Извините, мой плохой английский

1 Ответ

0 голосов
/ 23 ноября 2018

Этот пример (на основе вашего кода) может указать вам правильное направление.Вам нужно знать имя формы powerpoint (которое вы можете получить через VBA или через панель Home-Select-Selection на ленте.

Option Explicit

Public Sub UpdateShapes()

    Dim vPowerPoint As PowerPoint.Application
    Dim vPresentation As Presentation
    Dim vSlide As Slide

    Dim vShapeName As String
    Dim vShape, vNewShape

    Set vPowerPoint = New PowerPoint.Application
    vPowerPoint.Visible = True

    ' Open the powerpoint presentation
    Set vPresentation = vPowerPoint.Presentations.Open("\\network_folder\presentation.pptm")

    ' Set slide to be worked on
    Set vSlide = vPresentation.Slides(2)

    ' Set shape to (for this example) "Picture 3"
    vShapeName = "Picture 3"
    Set vShape = vSlide.Shapes(vShapeName)

    ' Copy and paste new shape (picture) of range specified
    ThisWorkbook.Sheets("Sheet1").Range("A6:B9").CopyPicture
    Set vNewShape = vSlide.Shapes.Paste

    ' Align size and position of new shape to that of old shape
    With vNewShape
        .Width = vShape.Width
        .Height = vShape.Height
        .Left = vShape.Left
        .Top = vShape.Top
    End With

    ' Delete original shape, rename new shape to original so code works next replace cycle
    vSlide.Shapes(vShapeName).Delete
    vNewShape.Name = vShapeName

End Sub
...