Mathias
Mathias

Reputation: 15391

Is there a direct way to get the index of a slide in a PowerPoint presentation?

I am trying to programmatically copy a slide in a PowerPoint presentation, and paste it right after the original.

My first thought was to get the index of the old slide, and add the copy at the desired new index, but I can't seem to find a straightforward way to retrieve that index. I expected to have something like Slides.IndexOf(Slide slide), but couldn't find anything like that. I ended up writing the very old-school following code, which seems to work, but I am curious as to whether there is a better way to do this.

var slide = (PowerPoint.Slide)powerpoint.ActiveWindow.View.Slide;
var slideIndex = 0;
for (int index = 1; index <= presentation.Slides.Count; index++)
{
    if (presentation.Slides[index] == slide)
    {
        slideIndex = index;
        break;
    }
}

This is C#/VSTO, but any input that could put me on the right path is appreciated, be it VBA or VB!

Upvotes: 5

Views: 5685

Answers (1)

Todd Main
Todd Main

Reputation: 29153

Yes, what you want is Duplicate which returns a SlideRange. Here's an example in VBA:

Sub DuplicateSlide()
    Dim ap As Presentation
    Set ap = ActivePresentation
    Dim sl As SlideRange
    Set sl = ap.Slides(2).Duplicate
End Sub

To just get the slide's index, you can use this:

Sub GetSlideIndex()
    Dim ap As Presentation
    Set ap = ActivePresentation
    Set sl = ap.Slides(2)
    Debug.Print sl.SlideIndex
End Sub

Upvotes: 1

Related Questions