5

У меня есть презентация PowerPoint (2010) с двумя слайдами. Оба слайда содержат изображение (два разных изображения), и презентация настроена на бесконечный цикл до нажатия ESC .

Файл Excel экспортирует два изображения, используемые в презентации PowerPoint, каждые 5 минут (это диаграммы, но я не могу использовать связанную диаграмму с файлом Excel в PowerPoint, потому что PowerPoint каким-то образом разрушает диаграмму). Изображения отличаются от исходных, и Excel настроен на перезапись существующих изображений. Я предполагаю, что PowerPoint теряет ссылку на файл, поскольку «новое» изображение отличается от «оригинального» изображения.

Кто-нибудь знает решение или альтернативный способ сделать это?

2 ответа2

6

Я сам столкнулся с этим для обновления погодных изображений из Интернета во время слайд-шоу.

Поскольку Powerpoint хранит файлы изображений внутри себя во время показа слайдов, они не обновляют изображения.

Это означает, что вы должны активировать его, чтобы обновить ссылки с помощью кода VBA или использовать add in like; Обновлять ссылки во время слайд-шоу Надстройка для PowerPoint 97 или более поздней версии или LiveImage - обновлять вставленное связанное изображение в режиме реального времени в PowerPoint.

Я больше не использую эту программу и не могу найти код, который когда-то использовал. Приведенная выше информация должна помочь вам достичь того, чего вы хотите.

4

Следующее сработало для меня. Сначала установите надстройку AutoEvents. В приведенном ниже примере используется непрерывная презентация PowerPoint из 2 слайдов (если у вас есть больше, измените оператор if в третьем макросе на номер вашего последнего слайда). Создайте три подпрограммы, которые делают то же самое:

  1. Sub Auto_ShowBegin()
  2. Sub Auto_Open()
  3. Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)

Auto_ShowBegin() и Auto_Open() одинаковы.

    Sub Auto_ShowBegin()
        Dim sldTemp As Slide
        Dim lngTemp As Long
        Dim lngCount As Long
        Dim myImage As Shape

        For Each sldTemp In ActivePresentation.Slides
            For lngCount = sldTemp.Shapes.Count To 1 Step -1
                With sldTemp.Shapes(lngCount)
                    If .Type = msoPicture Then
                        .Delete
                    End If
                End With
            Next
        Next

        Set sldTemp = ActivePresentation.Slides(1)

        Set myImage = sldTemp.Shapes.AddPicture( _
        FileName:="C:\Users\Name\image1.png", _
        LinkToFile:=msoFalse, _
        SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
        Top:=(ActivePresentation.PageSetup.SlideHeight / 2))

        myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
        myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)

        Set sldTemp = ActivePresentation.Slides(2)

        Set myImage = sldTemp.Shapes.AddPicture( _
        FileName:="C:\Users\Name\image2.png", _
        LinkToFile:=msoFalse, _
        SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
        Top:=(ActivePresentation.PageSetup.SlideHeight / 2))

        myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
        myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)
    End Sub

И третий макрос:

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    Dim sldTemp As Slide
    Dim lngTemp As Long
    Dim lngCount As Long
    Dim myImage As Shape
' AUTO UPDATE OF OLE LINKS MACRO
'
    If SSW.View.CurrentShowPosition = 2 Then
        For Each sldTemp In ActivePresentation.Slides
        For lngCount = sldTemp.Shapes.Count To 1 Step -1
            With sldTemp.Shapes(lngCount)
                If .Type = msoPicture Then
                    .Delete
                End If
            End With
        Next
    Next


    Set sldTemp = ActivePresentation.Slides(1)

    Set myImage = sldTemp.Shapes.AddPicture( _
    FileName:="C:\Users\Name\image1.png", _
    LinkToFile:=msoFalse, _
    SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
    Top:=(ActivePresentation.PageSetup.SlideHeight / 2))

    myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
    myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)

    Set sldTemp = ActivePresentation.Slides(2)

    Set myImage = sldTemp.Shapes.AddPicture( _
    FileName:="C:\Users\Name\image2.png", _
    LinkToFile:=msoFalse, _
    SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
    Top:=(ActivePresentation.PageSetup.SlideHeight / 2))

    myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
    myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)



    End If
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .