Макрос для обновления объекта Excel в PowerPoint

У меня есть презентация PowerPoint, в которой в качестве объектов есть несколько таблиц Excel. Файлы Excel обновляются раз в неделю. После обновления файлов Excel мне нужно открыть PowerPoint, дважды щелкнув каждый объект -> меню Данные -> Редактировать ссылки -> выбрать все источники -> Обновить значения.

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

После поиска в Интернете мне удалось получить следующий код, который приводит меня к шагу двойного щелчка по объекту, но я не знаю, как обновить ссылки.

Sub update_objects()

    Dim it As String
    Dim i As Integer
    For i = 1 To ActiveWindow.Selection.SlideRange.Shapes.Count

        With ActiveWindow.Selection.SlideRange.Shapes(i)
            If .Type = msoEmbeddedOLEObject Then
                ActiveWindow.Selection.SlideRange.Shapes(i).Select.OLEFormat.DoVerb
            End If
        End With
    Next i
End Sub

2 ответа

Этот код работает, но не во всех случаях. Он был написан для 2010 года. Измените тип по мере необходимости. 7 Excel Встроенные объекты.

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub open_and_close_all_objects()
    'This will open and then close all charts and graphs in the presentation to allow them to keep the data
    'Why this is needed is a question to be answered in the future.


    Dim oSH As Shape
    Dim oSl As Slide
    Dim oSheet As Object


    For Each oSl In ActivePresentation.Slides
        For Each oSH In oSl.Shapes

        ActiveWindow.View.GotoSlide oSl.Slideindex
             If oSH.Type = 7 Then
                oSH.Select
                oSH.OLEFormat.Activate

                Call Sleep(1500)

                ActiveWindow.Selection.Unselect
                ActiveWindow.View.GotoSlide oSl.Slideindex
            End If

        Next


     Next
     End Sub

Чтобы использовать функцию сна, сделайте следующее:

      #If VBA7 Then ' Excel 2010 or later
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#Else ' Excel 2007 or earlier
Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long)
#End If

Откуда: https://www.educba.com/vba-sleep/

Другие вопросы по тегам