TPE
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