SmartArt位于占位符内时访问SmartArt形状(PowerPoint 2007)

时间:2010-08-24 15:05:44

标签: vba vsto powerpoint powerpoint-vba

我需要在PowerPoint 2007中浏览智能艺术的每个形状。 当shape.Type=msoSmartArt然后我可以简单地浏览shape.GroupItems中的形状。

然而,当shape.Type == msoPlaceholder && shape.PlaceholderFormat.ContainedType==msoSmartArt 那么shape.GroupItems是空的。在这种情况下如何访问Smart Art形状?


我曾经认为VBA和C#VSTO基本相同。

嗯 - 这里有区别。我在实际的VBA中尝试过Otaku的代码,它确实似乎有效(对于混淆,Otaku而言)。

但是,我的程序在C#VSTO中,并且:

foreach (Shape slideShape in pres.Slides[1].Shapes)
{
  if (slideShape.Type != MsoShapeType.msoSmartArt &&   !(slideShape.Type == MsoShapeType.msoPlaceholder &&  slideShape.PlaceholderFormat.ContainedType==MsoShapeType.msoSmartArt))
 continue;

 GroupShapes shapes=slideShape.GroupItems;
 Debug.WriteLine(shapes.Count);
}

是否生成:shapes.Count=0(当形状类型为占位符,且包含的类型为SmartArt时)。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

使用GroupShapes,例如:

Sub GetSAfromPlaceholder()
    Dim ap As Presentation: Set ap = ActivePresentation
    Dim sl As Slide: Set sl = ap.Slides(2)
    Dim sh As Shape: Set sh = sl.Shapes(2)
    Dim gsh As GroupShapes: Set gsh = sh.GroupItems
    If sh.Type = msoPlaceholder Then
        If sh.PlaceholderFormat.ContainedType = msoSmartArt Then
        Debug.Print "SmartArt Shape Count: " & gsh.Count
          For i = 1 To gsh.Count
            If gsh(i).TextFrame.HasText Then
                Debug.Print gsh(i).TextFrame.TextRange.Text
            End If
            Next
        End If
    End If
End Sub

答案 1 :(得分:0)

我使用的解决方法是复制SmartArt并将其粘贴回来。 粘贴的SmartArt现在在其GroupItems中具有所有形状。 使用这些后,我删除粘贴的形状。