2017-01-27 3 views
0

Ich habe mehrere PowerPoint-Folien mit Objekten (Pfeile und Rechtecke), die ich gerne ein- und ausblenden würde. Im Moment benutze ich nurVBA PowerPoint Anzeigen und Ausblenden von Formen

ActivePresentation.Slides("Slide100").Shapes("Rectangle 99").Visible = False or True 

ActivePresentation.Slides("Slide100").Shapes("Straight Arrow Connector 118").Visible = False or True 

Nun kann es sein, dass ein Rechteck oder Pfeil in dieser Vorlage gelöscht werden muss. Dies führt zu VBA-Fehlern beim Ausführen des Makros, weil das Rechteck oder Pfeil nicht gefunden werden konnte. Gibt es eine Möglichkeit, ein Makro zu schreiben, um alle verwendeten Rechtecke und Pfeile zu überprüfen und dann alle zu verbergen oder anzuzeigen, statt einzelne Variablen zu verwenden?

fand ich etwas wie folgt aus:

For Each sObject In ActivePresentation.Slides(2).Shapes 
sObject.Visible = False 
Next 

Aber ich brauche nur Rechtecke und Pfeile, mehr nichts zu verbergen.

Mit freundlichen Grüßen Peter

Antwort

2

Nehmen Sie diese Schleife als Ausgangspunkt und eine gewisse Logik in ihr gelten. Es gibt zwei Eigenschaften der Form, die nützlich sein könnten, autoshapetype und name

Zwei Beispiele unter:

For Each shp In ActivePresentation.Slides(x).Shapes 
    If InStr(1, shp.Name, "Rectangle") > 0 Then 
     shp.Visible = False 
    End If 
Next shp 

oder

For Each shp In ActivePresentation.Slides(x).Shapes 
    If shp.AutoShapeType = msoShapeRectangle Then 
     shp.Visible = False 
    End If 
Next shp 
1

Dadurch werden alle Rechteck Typen verstecken und eine Teilmenge der Pfeiltypen über alle Folien in der aktiven Präsentation:

' PowerPoint VBA Macro 
' Purpose : hide rectangles and shapes across slides 
' Written by : Jamie Garroch of YOUpresent Ltd. http://youpresent.co.uk. 
Sub HideRectanglesAndArrows() 
    Dim oSld As Slide 
    Dim oShp As Shape 
    For Each oSld In ActivePresentation.Slides 
    For Each oShp In oSld.Shapes 
     If oShp.Type = msoAutoShape Then 
     Select Case oShp.AutoShapeType 
      ' Basic Arrows (4) 
      Case msoShapeUpArrow, msoShapeDownArrow, msoShapeLeftArrow, msoShapeRightArrow 
      oShp.Visible = msoFalse 
      ' Double Arrows (2) 
      Case msoShapeUpDownArrow, msoShapeLeftRightArrow 
      oShp.Visible = msoFalse 
      ' Add other arrow types as required 
      ' 
      ' Basic Rectangles (1) 
      Case msoShapeRectangle 
      oShp.Visible = msoFalse 
      ' Rounded Rectangles (4) 
      Case msoShapeRound1Rectangle, msoShapeRound2DiagRectangle, msoShapeRound2SameRectangle, msoShapeRoundedRectangle 
      oShp.Visible = msoFalse 
      ' Snipped Rectangles (4) 
      Case msoShapeSnip1Rectangle, msoShapeSnip2DiagRectangle, msoShapeSnip2SameRectangle, msoShapeSnipRoundRectangle 
      oShp.Visible = msoFalse 
     End Select 
     End If 
    Next 
    Next 
End Sub 

Sie können dann Logik hinzufügen, um bestimmte Formen zu löschen, indem Sie die .Name-Eigenschaft oder die Positionseigenschaften (.Left, .Top) oder Größeneigenschaften (.Width, .Height) verwenden. Wenn Sie etwas ausgefeilter sein möchten (Benutzer können die Namen von Formen ändern), können Sie Tags zu Shapes hinzufügen, um sie auf eine Weise zu identifizieren, die der Benutzer nicht ändern kann, und dann eine Prozedur schreiben, um die .Tags -Eigenschaft in Ihrer Logik zu überprüfen.