TPE

http://bayanbox.ir/view/263405954590585756/2mobile.png

Tavvafi@gmail.com


≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡

Function BodyTextPlaceholder(oSl As Slide) As Shape
    Dim oSh As Shape
    For Each oSh In oSl.Shapes
        If oSh.Type = msoPlaceholder Then
            ' change ppPlaceholderBody to another placeholder type if you 
            ' want to get a reference to a different placeholder
            If oSh.PlaceholderFormat.Type = ppPlaceholderBody Then
                ' we found it
                Set BodyTextPlaceholder = oSh
                Exit Function
            End If
        End If
    Next    ' shape
End Function

این Function با یک ماکرو قابل تست است:

Sub TestBodyTextPlaceholder()
    Dim oSl As Slide
    Dim oSh As Shape
    Set oSl = ActivePresentation.Slides(2)
    Set oSh = BodyTextPlaceholder(oSl)
    ' If there's no placeholder, the function returns nothing, so test:
    If Not oSh Is Nothing Then
        MsgBox oSh.TextFrame.TextRange.Text
    End If
End Sub

یک function دیگه:

Function GetPlaceholder( _
    oSl As Object, _
    sPHType As String, _
    Optional lBodyPlaceholderNumber As Long = 1) _
    As Shape

    ' NOTE: oSl is DIMmed as object rather than as slide
    '       so we can pass this function
    '       a slide OR slide master, notes page, etc
    '
    ' By default, if you ask for a body placeholder, it returns the first one
    ' If you want the second body placeholder, pass a 2 as third parameter

    Dim lPlaceholderType As Long
    Dim oSh As Shape
    Dim lBodyPlaceholderCount As Long

    lBodyPlaceholderCount = 0  ' to start

    ' You could instead create an ENUM defining all of these values
    ' which would make the function easier to use (help from intellisense)
    ' but this way it's self-contained
    Select Case UCase(sPHType)
        Case Is = "TITLE"
            lPlaceholderType = 1
        Case Is = "BODY"
            lPlaceholderType = 2
        Case Is = "CENTERTITLE"
            lPlaceholderType = 3
        Case Is = "SUBTITLE"
            lPlaceholderType = 4
        Case Is = "VERTICALTITLE"
            lPlaceholderType = 5
        Case Is = "VERTICALBODY"
            lPlaceholderType = 6
        Case Is = "OBJECT"
            lPlaceholderType = 7
        Case Is = "CHART"
            lPlaceholderType = 8
        Case Is = "BITMAP"
            lPlaceholderType = 9
        Case Is = "MEDIACLIP"
            lPlaceholderType = 10
        Case Is = "ORGCHART"
            lPlaceholderType = 11
        Case Is = "TABLE"
            lPlaceholderType = 12
        Case Is = "SLIDENUMBER"
            lPlaceholderType = 13
        Case Is = "HEADER"
            lPlaceholderType = 14
        Case Is = "FOOTER"
            lPlaceholderType = 15
        Case Is = "DATE"
            lPlaceholderType = 16
        Case Is = "VERTICALOBJECT"
            lPlaceholderType = 17
        Case Is = "PICTURE"
            lPlaceholderType = 18
    End Select

    ' Check each shape on the "slide" to see if it matches the
    ' placeholder type called for

    For Each oSh In oSl.Shapes
        ' is it a placeholder in the first place?
        If oSh.Type = msoPlaceholder Then
            If oSh.PlaceholderFormat.Type = lPlaceholderType Then

                ' Body placeholder? If so, first or second?
                If lPlaceholderType = ppPlaceholderBody Then
                    lBodyPlaceholderCount = lBodyPlaceholderCount + 1
                    ' if we're looking for the first one:
                    If lBodyPlaceholderNumber = 1 Then
                        ' and this IS the first one:
                        If lBodyPlaceholderCount = 1 Then
                            Set GetPlaceholder = oSh
                            Exit Function
                        End If
                    Else    ' we're looking for the second body placeholder
                        ' and this IS the second one:
                        If lBodyPlaceholderCount = 2 Then
                            Set GetPlaceholder = oSh
                            Exit Function
                        End If
                    End If

                Else    ' we're not worried about body placeholder numbers
                    Set GetPlaceholder = oSh
                End If

            End If
        End If
    Next    ' shape

End Function

Sub TestGetPlaceholder()
    Dim oSh As Shape
    Dim oSl As Slide
    Set oSl = ActivePresentation.Slides(1)

    ' Here's how you call the function:
    Set oSh = GetPlaceholder(oSl, "body", 1)

    ' Test to make sure it returned a shape:
    If Not oSh Is Nothing Then
        MsgBox oSh.Name
    Else
        MsgBox "No such placeholder on this slide"
    End If    
End Sub