Previous  Home  Next

PowerPoint Basics

This is the code from the PowerPoint Basics section of the seminar ( mod02PowerPointBasics)

Option Explicit
' NOTE:  These examples refer to slides 2 & 3, titled "PowerPoint Basics"

Sub PowerPointBasics_1()
    ' The PowerPoint Ojbect Model (OM)
    ' Navigating the OM

    ' Everything in PowerPoint is an Object of one type or another
    ' To control PowerPoint, you'll work with its objects

    ' Some objects are collections of other objects
    ' Objects have Properties - things that describe the object
    ' Objects have Methods - things the object can do or that you can do to it

    ' The Object Model is the whole collection of PowerPoint objects
    ' arranged in hierarchical fashion.
    ' An upside downtree diagram, in other words.

    ' Search Help on "object model"
    ' Press F2 to see the Object Browser

    ' The top level (or trunk) of the tree is the Application
    ' That's PowerPoint itself.
    ' The Application object has properties:
    Debug.Print Application.Name

    ' Using Debug.Print instead of MsgBox saves a little time
    ' and we don't have to keep clicking the OK button
    ' Debug.Print "prints" its output in the Immediate window of
    ' the VB Editor (IDE)
    ' If it's not visible, use View, Immediate Window or press Ctrl+G

    ' The .Presentations property returns a collection of the current
    ' open presentations and by "drilling down" through the object model
    ' (swinging like Tarzan from branch to branch?)
    ' you can get to lower level properties.
    ' We use "dot notation" for this:
    Debug.Print Application.Presentations.Count

    ' We can refer to specific members of collections by number:
    Debug.Print Application.Presentations(1).Name

    ' So PowerPoint (the application) contains Presentations
    ' Presentations contain Slides
    ' Slides contain Shapes like rectangles and circles
    ' So it stands to reason that we can:
    Debug.Print Application.ActivePresentation.Slides(2).Shapes.Count

    ' But all this typing is starting to get tedious
    ' It's easier (for us) and faster (for PowerPoint) to do this:
    ' Use With to "drill down" object you want to work with ...
    With ActivePresentation.Slides(2).Shapes(2)
        ' then all you need to do is add the dot and work with each property
        Debug.Print .Name
        Debug.Print .Height
        Debug.Print .Width
    ' and finally, End With to tell VBA/PowerPoint that you're done
    End With

    ' and to save more time, we can nest these things
    With ActivePresentation.Slides(2).Shapes(2)
        Debug.Print .Name
        With .TextFrame.TextRange
            Debug.Print .Text
            Debug.Print .Font.Name
        End With
    End With

End Sub

Sub PowerPointBasics_2()
    ' Working with the currently selected shape

    ' Show the name:
    With ActiveWindow.Selection.ShapeRange(1)
        Debug.Print .Name
    End With

    ' Change the name and move it:
    With ActiveWindow.Selection.ShapeRange(1)
        ' Naming shapes can be VERY useful, as you'll see
        .Name = "My favorite shape"
        .Left = .Left + 72  ' points, or 1 inch
    End With

End Sub

Sub PowerPointBasics_3()
    ' Working with a named shape
    ' If you know the name of a shape (and you just saw how to name it)
    ' You can manipulate it directly:
    ' No need to go to the slide, no need to select the shape, Just Do It

    With ActivePresentation.Slides(2).Shapes("My favorite shape")
        .Top = .Top - 72
    End With

    ' Slides can have names too
    With ActivePresentation.Slides(2)
        .Name = "My favorite slide"
    End With

    ' The slide's name stays with it
    ' even if we move it to a different position in the presentation

    ' And now we can do:
    With ActivePresentation.Slides("My favorite slide").Shapes("My favorite shape")
        .Height = .Height * 2
    End With

End Sub

Sub PowerPointBasics_4()
    ' References to objects

    ' Variables can hold references to objects
    ' This is a bit tough to get your head around, so don't worry
    ' It'll become clearer as you see working examples

    ' For now, watch this:

    ' Dim a variable as a specific object type
    Dim oShape As Shape

    ' Set it to "point" to a specific shape:
    Set oShape = ActivePresentation.Slides("My favorite slide").Shapes("My favorite shape")
    ' Notice that we used our slide's name?

    ' From now on, we can treat oShape as though it really WERE the shape
    Debug.Print oShape.TextFrame.TextRange.Text
    oShape.TextFrame.TextRange.Font.Color.RGB = RGB(255, 0, 0)
    ' and so on

    ' Until we release the memory used by oShape
    Set oShape = Nothing

End Sub

Sub PowerPointBasics_5()
    ' Looping through all of the slides
    ' Looping through all of the shapes

    ' So far, we haven't done anything you couldn't do
    ' with your mouse, and do it more easily at that.
    ' One more little lesson, then the real fun starts.

    Dim x As Long   ' we'll use X as a counter
    ' OK, I said always to give variables meaningful names
    ' But for little "throwaway" jobs like this, programmers often
    ' use x, y, and the like

    ' Let's do something with every slide in the presentation
    For x = 1 To ActivePresentation.Slides.Count
        Debug.Print ActivePresentation.Slides(x).Name
    Next x

    ' Or with every shape on one of the slides
    ' Since x is a "junk" variable, we'll just re-use it here
    ' And we'll use the With syntax to save some typing
    With ActivePresentation.Slides(3)
        For x = 1 To .Shapes.Count
            Debug.Print .Shapes(x).Name
        Next x
    End With  ' ActivePresentation.Slides(3)

End Sub

Sub PowerPointBasics_6()
    ' Error Handling

    ' You can trust computer users to do one thing and one thing only:
    '           The Unexpected
    ' You can trust computers to do pretty much the same

    ' That's where error handling comes in

    ' What do you think will happen when I run this code?
    With ActivePresentation.Slides(42)
        MsgBox ("Steve, you moron, there IS no slide 42!")
    End With

End Sub

Sub PowerPointBasics_6a()
    ' Error Handling Continued

    ' Let's protect our code against boneheaded Steves
    ' If he does something that provokes an error, deal with it gracefully
    On Error GoTo ErrorHandler

    With ActivePresentation.Slides(42)
        MsgBox ("Steve, you moron, there IS no slide 42!")
    End With

' Words with a : at the end are "labels"
' and can be the destination of a "GoTo" command
' Using GoTo is considered Very Bad Form except in error handlers

' If we got here without error we need to quit before we hit the error
' handling code so ...
NormalExit:
    Exit Sub

ErrorHandler:
    MsgBox ("Error: " & Err.Number & vbCrLf & Err.Description)
    ' resume next
    ' exit sub
    Resume NormalExit

End Sub

Click Next to continue

Previous  Home  Next