Макрос для обновления объекта 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