Loop Through Charts on Selected (or Range of) Powerpoint Slides

倖福魔咒の 提交于 2019-12-13 00:45:52

问题


I am currently using this code to update all links in my powerpoint presentation:

Sub UpdateLinks()
Dim ExcelFile
Dim exl As Object
Set exl = CreateObject("Excel.Application")

ExcelFile = "C:\Users\J\Documents\Reporting\Governance Physical Charts.xlsm"

Dim i As Integer
Dim k As Integer

 'Go through every slide
For i = 1 To ActivePresentation.Slides.Count
    With ActivePresentation.Slides(i)
         'Go through every shape on every slide
        For k = 1 To .Shapes.Count
On Error Resume Next
             'Set the source to be the same as teh file chosen in the opening dialog box
            .Shapes(k).LinkFormat.SourceFullName = ExcelFile
            If .Shapes(k).LinkFormat.SourceFullName = ExcelFile Then
                 'If the change was successful then also set it to update automatically
                .Shapes(k).LinkFormat.AutoUpdate = ppUpdateOptionAutomatic 'other option is ppUpdateOptionManual
            End If

        Next k
    End With
Next i
End Sub

Instead of updating the link of every chart in the presentation, is it possible to have this code loop through only selected slides? Or if it's easier - is it possible to set a range? For example, only update charts on slides 15-30?

Thank you!

EDIT: Resolution provided in comments - here is my revised code

Sub UpdateLinks()
Dim ExcelFile
Dim exl As Object
Set exl = CreateObject("Excel.Application")
Dim sld As Slide

ExcelFile = "C:\Users\J\Documents\Reporting\Governance Physical Charts.xlsm"

Dim i As Integer
Dim shp As Shape

 For Each sld In ActivePresentation.Slides.Range(Array(11, 12, 13, 14, 15, 16, 17, 18))

        For Each shp In sld.Shapes
On Error Resume Next
            shp.LinkFormat.SourceFullName = ExcelFile
            If shp.LinkFormat.SourceFullName = ExcelFile Then
                shp.LinkFormat.AutoUpdate = ppUpdateOptionAutomatic 'other option is ppUpdateOptionManual
            End If

        Next shp


Next
 End Sub

回答1:


Yes you can compose custom ranges on Slides as well as on Shapes, using an Array as the index parameter. Try this:

Dim sld As Slide
For Each sld In ActivePresentation.Slides.Range(Array(1, 3, 5))
    Debug.Print sld.Name
Next

Output:

Slide2 Slide4 Slide6

p.s. I had deleted a slide in the test presentation.




回答2:


Since you also mentioned processing just selected slides, you can do that like so:

Sub SelectedSlides()
    Dim osl As Slide
    For Each osl In ActiveWindow.Selection.SlideRange
        Debug.Print osl.SlideIndex
    Next
End Sub

Note that this will give you the selected slides in REVERSE order of selection. That is, if you control-click slides 2,4,6, this will give you 6,4,2.



来源:https://stackoverflow.com/questions/42096091/loop-through-charts-on-selected-or-range-of-powerpoint-slides

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!