2 Stimmen

Zugriff auf SmartArt-Formen, wenn sich die SmartArt innerhalb eines Platzhalters befindet (PowerPoint 2007)

Ich muss in PowerPoint 2007 jede Form einer Smart-Art durchgehen. Wenn shape.Type=msoSmartArt dann könnte ich einfach durch die Formen in shape.GroupItems gehen.

Wenn jedoch shape.Type == msoPlaceholder && shape.PlaceholderFormat.ContainedType==msoSmartArt dann shape.GroupItems leer ist. Wie kann ich in einem solchen Fall auf die Smart Art-Formen zugreifen?


Ich dachte immer, dass VBA und C# VSTO im Grunde dasselbe sind.

Nun - hier gibt es einen Unterschied. Ich habe Otakus Code in aktuellem VBA ausprobiert und es scheint tatsächlich zu funktionieren (sorry für die Verwirrung, Otaku).

Allerdings ist mein Programm in C# VSTO, und:

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);
}

Produziert: shapes.Count=0 (wenn der Formtyp "Platzhalter" und der Typ "enthalten" "SmartArt" ist).

Irgendwelche Ideen?

1voto

Todd Main Punkte 31727

Utilice GroupShapes , wie:

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

0voto

Arie Livshin Punkte 805

Die Abhilfe, die ich verwende, besteht darin, das SmartArt zu kopieren und es wieder einzufügen. Das eingefügte SmartArt hat nun alle Formen in seinen GroupItems. Nachdem ich mit diesen gearbeitet habe, lösche ich die eingefügte Form.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X