如何确定占位符正在使用中?
您需要循环浏览幻灯片上的所有占位符,确定每个人的类型,然后检查是否填充了预期的格式。有18 PpPlaceholderType
,所以你必须将它们全部设置好,但下面是你可以做什么来检查是否正在使用占位符的示例。
Sub CheckPlaceholders()
Dim ap As Presentation: Set ap = ActivePresentation
Dim sl As Slide: Set sl = ap.Slides(2)
Dim shs As Shapes: Set shs = sl.Shapes
Dim ph As Placeholders: Set ph = shs.Placeholders
Dim p As Shape
For Each p In ph
Select Case p.Type
Case PpPlaceholderType.ppPlaceholderHeader
If p.TextFrame.HasText Then
Debug.Print "This Placeholder is in use"
End If
Case PpPlaceholderType.ppPlaceholderChart
If p.HasChart Then
Debug.Print "This Placeholder is in use"
End If
End Select
Next
End Sub
要插入,比方说,一张图片,没有它在一个占位符到达,我发现的唯一方法是创建一个循环来添加图片,直到其中一人是出于一个占位符,然后删除已经插入的那些。
Sub AddPicture()
Dim pic As String
pic = "C:\Users\Me\Desktop\beigeplum.jpg"
Dim ap As Presentation: Set ap = ActivePresentation
Dim sl As Slide: Set sl = ap.Slides(1)
Dim sh As Shape
Do
Set sh = sl.Shapes.AddPicture(pic, msoFalse, msoTrue, 1, 1)
sh.Tags.Add "MYPICTURE", 0
Loop Until sh.Type <> 14
Dim p As Shape
For Each p In sl.Shapes
If p.Type = 14 Then
If p.Tags.count > 0 Then
If p.Tags.Name(1) = "MYPICTURE" Then
p.Delete
End If
End If
End If
Next
End Sub
一个更优雅的解决方案,以找出是否一个占位符包含项目或没有,这是通用于所有类型的:如果不放在里面
if (selectedSlide.Shapes.Placeholders[i].PlaceholderFormat.ContainedType != Microsoft.Office.Core.MsoShapeType.msoAutoShape)
占位符是ContainedType msoAutoShape的占位符。将例如图像插入占位符时,类型将更改为项目类型,在本例中为msoPicture。
Office自动将项目添加到第一个可用的占位符(在主文件中首先添加),或者为ppPlaceholderPicture优先的图像添加项目。
这只能回答问题的一部分,当时我更关心如何强迫办公室不要将图片添加到占位符 – Dudi 2012-02-01 20:55:23
有时即使它们有内容,它们仍然是自动形状: - / – BrainSlugs83 2016-04-27 01:12:40
我知道这个解决方案,我正在寻找一个更优雅的。 至于占位符的自动使用,只需尝试添加一个对象到布局幻灯片 - ppLayoutObject说通过 activeSlide.Shapes.AddPicture(...); – Dudi 2010-07-06 19:07:08
是的,自PPT2007以来,所有东西都占据了一定的位置。您在其他帖子中提到的解决方案是一种方法,但您说得对,当旧的幻灯片布局重新应用时,它会退缩。我发现的唯一方法是有点哈克。见上面的更新。 – 2010-07-06 21:36:24
关于占位符的使用,这是关于尽可能优雅,因为它:( – 2010-07-06 21:45:39