[Powerpoint] Auswählen von eingefügtem Bild und Hinzufügen eines Rahmens

Sebastian Thalhammer

Erfahrenes Mitglied
Hallo zusammen!

Ich hab eine 150 Folien starke PPT auf der jeweils ein Bild entsprechend dem Layoutdesign eingefügt wurde. Es handelt sich um eine Nachbildung eines Displaymenüs.

Nun benötige ich eine Umrandung der Bilder und möchte das automatisch per Makro erledigen lassen. Vor allem wenn dann entschieden wird, dass sich die Rahmendicke als zu groß herausgestellt hat ;-)

Per Aufzeichnen konnte ich folgenden Code erstellen:
PHP:
ActiveWindow.Selection.SlideRange.Shapes("Picture 13").Select

    With ActiveWindow.Selection.ShapeRange
        .Line.Weight = 6#
        .Line.Visible = msoTrue
        .Line.Style = msoLineSingle
    End With

Da ich aber natürlich dem Makro die Auswahl des Bildes überlassen möchte, suche ich nach einer Möglichkeit, das Bild jeder Folie automatisch auswählen zu lassen. Leider steigen meine VBA Kenntnisse dabei aus.

Welche Befehle benötige ich um
PHP:
ActiveWindow.Selection.SlideRange.Shapes("Picture 13").Select
dahingehend zu verändern? Bzw. wäre eine globale Lösung (für alle Folien gleichzeitig) noch besser.

Grüße
Sebastian
 

HonniCilest

Erfahrenes Mitglied
Huhu,

dabei helfen dir Schleifen. Im folgenden Beispiel gehst du jede Folie der Präsentation und von diesen Folien jedes Shape durch...

Code:
    Dim mSlide As Slide
    Dim mShape As Shape

    For Each mSlide In ActivePresentation.Slides
        For Each mShape In mSlide.Shapes
            mShape.Select
            'tue etwas mit der Selektion
        Next mShape
    Next mSlide

Aber Achtung! Shapes können alles mögliche sein, um Bilder erkennen zu können würde ich eine Abfrage einbauen, ob der Name des Shapes mit "Picture" beginnt oder Ähnliches. Daher habe ich es meinerseits ein wenig ausformuliert. Dies könnte so aussehen:

Code:
    Dim mSlide As Slide
    Dim mShape As Shape

    For Each mSlide In ActivePresentation.Slides
        For Each mShape In mSlide.Shapes
            If mShape.Type = msoPicture Then
            'before edited: If Left(mShape.Name, 7) = "Picture" Then
                With mShape.Line
                    .Weight = 6#
                    .Visible = msoTrue
                    .Style = msoLineSingle
                End With
            End If
        Next mShape
    Next mSlide

Edit: Warum Namen überprüfen, wenn's auch Type gibt ;)
 
Zuletzt bearbeitet:

Sebastian Thalhammer

Erfahrenes Mitglied
Tja HonniCilest,

das war exakt das, was ich gesucht habe. Vor allem das mit der Abfrage der Benennung war Gold wert. Vielen Dank dafür!
Ein paar Ausreißer habe ich dabei, denen kann ich aber auch manuell keine Rahmen zufügen.

Trotzdem. Das Hauptproblem ist gelöst.
 

HonniCilest

Erfahrenes Mitglied
Ich muss auch zugeben du hast wirklich sehr gut beschrieben, was du haben möchtest. Das ist ein Musterbeispiel, welches man nicht allzuoft findet...

Zwecks Benennung hatte ich mein Beispiel nochmal überarbeitet, ich weiß leider nicht, warum du ein paar Ausreißer hast, aber eventuell hilft dir das...