none
Powerpoint: zweiten Folienmaster per VBA anzeigen RRS feed

  • Frage

  • Hallo liebe Forumsmitglieder,

    ich habe eine Powerpoint-Präsentation mit mehreren Folienmastern. In jedem Folienmaster ist ein Textfeld eingefügt. Darin möchte ich gern per Makro den Dateinamen der der Präsentation einfügen. Zunächst würde ich daher gern die entsprechende Masterfolie ansprechen und das beschriebene Textfeld markieren. Mein Vorgehen war bislang folgendes:

    'in Folienmaster-Ansicht wechseln

    ActiveWindow.ViewType = ppViewSlideMaster

    'Textfeld in Folienmaster des ersten Designs auswählen

    ActivePresentation.Designs(1).SlideMaster.Shapes(6).Select

    Das funktioniert auch soweit. Sobald ich aber die zweite Masterfolie ansprechen möchte über:

    ActivePresentation.Designs(2).SlideMaster.Shapes(6).Select

    bekomme ich die Meldung: "Shape (unknown member): Invalid request. To select a shape its view must be active."

    Nur, wenn ich die 2. Masterfolie selbst mit der Maus anwähle und das Makro ausführe (in dem Fall ohne ActiveWindow.ViewType = ppViewSlideMaster vorher auszuführen), funktioniert die Auswahl. Wie schaffe ich es, dass ich nach dem Wechsel in die Masteransicht bzw. der Auswahl des ersten Textfeldes im ersten Design allein durch den VBA Makro-Code in der 2. und auch in weiteren Masterfolien lande, ohne Zwischenschritte per Mausklicks durchführen zu müssen?

    Ich benutze Powerpoint 2016.

    Ich hoffe auf hilfreiche Tipps von euch.

    Viele Grüße

    Martin



    Donnerstag, 19. Januar 2017 18:52

Alle Antworten

  • Hallo Martin,

    wenn ich die Fehlermeldung richtig interpretiere liegt es nicht an der Adressierung des zweiten Folienmasters, sondern am ausgewählten Shape des zweiten Folienmaster.

    Versuche doch mal zunächst:

    ActivePresentation.Designs(2).SlideMaster.Shapes(1).Select

    Erzeugt das auch ein Fehlermeldung?

    Grüße

    Roland

    Freitag, 20. Januar 2017 07:03
  • Hallo Martin,

    Roland sollte Recht haben. Leider erfahren wir nicht ob Du zwischenzeitlich eine andere Anwendung benutzt hast.

    Da Du sowieso schon mit PPT- und Masters abeitest: Gib den MasterSlides und den Shapes echte Namen per VBA.

    Slides(xyz).Name="Bla"

    Und speche Deine VBA nicht mit ActivePresentation sondern mit dem qualifiziertem Namen an.
    Man kann dann auch mit PowerPoint geniale Sachen machen!

    Gruß aus Hannover

    Raimo


    • Bearbeitet RaimoBecker Freitag, 20. Januar 2017 12:07
    Freitag, 20. Januar 2017 12:04
  • Hallo Roland,

    vielen Dank für deine Antwort. Ich habe deinen Tipp ausprobiert und bekomme wieder dieselbe Fehlermeldung. Hast du noch eine weitere Idee?

    Das Merkwürdige dabei ist auch, dass ich über die MsgBox eine Ausgabe bekomme, wenn ich mir den Namen des Shapes ausgeben lasse:

    MsgBox ActivePresentation.Designs(2).SlideMaster.Shapes(1).Name

    ergibt: "Title Placeholder 1"

    ActivePresentation.Designs(2).SlideMaster.Shapes(1).Select
    wird leider nicht erkannt.

    Viele Grüße

     

    Martin

    Sonntag, 22. Januar 2017 12:06

  • Hallo Raimo

     

    Hallo Raimo,

    vielen Dank auch für deine Hinweise. Leider konnte ich bei meiner Suche im Netz noch nicht herausfinden, wie ich ohne ActivePresentation meine VBA ansprechen kann. Mir fehlt hier wohl noch die Erfahrung mit Powerpoint. Kannst du mir bitte ein Bsp. dazu geben?

    Die Namen habe ich vergeben und Folgendes ausprobiert:

    ActiveWindow.ViewType = ppViewSlideMaster
    
    ActivePresentation.Designs(2).Name = "Design2"
    ActivePresentation.Designs("Design2").SlideMaster.Shapes(1).Name = "Shape1"
    
    ActivePresentation.Designs("Design2").SlideMaster.Shapes("Shape1").Select

    Aber auch hier bekomme ich den schon genannten Laufzeitfehler in der letzten Codezeile.

    Viele Grüße

     

    Martin

    Sonntag, 22. Januar 2017 12:11
  • Hallo Martin,

    wie es aussieht war meine erste Aussage nicht ganz richtig. Laut Dokumentation lässt sich eine Folie nicht in allen Ansichten selektieren.

    Mein nächste Empfehlung geht dahin eine eigene Shape Variabel für die Folie zu erzeugen. Diese Variable kannst Du Dir im Debugger ganz genau ansehen, und kannst natürlich in Deinem Code dem Shape direkt den gewünschten Dateinamen zuweisen.

     
    Dim shp as Shape
    
    shp = ActivePresentation.Designs(2).SlideMaster.Shapes(1)
    shp.titel = "Hier steht der Inhalt für den Titel"

    Es kommt natürlich darauf an wo Du was auf der Folie einfügen willst. Dazu muss man sich dann natürlich noch einmal die Klassen-Dokumentation des Shapes genauer ansehen.

    siehe hier


    Grüße

    Roland

    PS: Solltest Du direkt mit VBA arbeiten muss vor die zweite Zeile noch ein Set also

    SET shp =...

    Sonntag, 22. Januar 2017 18:32
  • Hallo Roland,

    ich habe noch mal eine Weile mit Powerpoint Verschiedenes ausprobiert. Was funktioniert, ist, anhand deines letzten Beispiels:

    Dim shp as Shape
    
    Set shp = ActivePresentation.Designs(2).SlideMaster.Shapes(1)
    shp.TextFrame.TextRange.Text = "test"

    wobei ich mit "Set shp" ja nur den dahinterstehenden Ausdruck verkürze. Ich brauche nun zum Schreiben des Textes nicht einmal in die Folienmasteransicht wechseln und das Makro funktioniert einwandfrei. Damit ist mein Anfangsproblem gelöst und es war dann doch viel einfacher als gedacht.

    Allerdings bleibt jetzt die Frage offen, warum ich nicht über Select das Shape auswählen kann, wie ich es mit dem geplanten Zwischenschritt anfangs versucht hatte. Das wird wohl erst einmal ungelöst bleiben...

    Vielen Dank noch mal für deine Hilfe.

    Viele Grüße

    Martin

    Samstag, 4. Februar 2017 22:05
  • Hallo Martin,

    das ist in der Dokumentation auch so beschrieben siehe hier der rot umrahmte Teil:

    Grüße

    Roland

    • Bearbeitet Roland Franz Samstag, 4. Februar 2017 23:20
    • Als Antwort markiert 'OCX Montag, 6. Februar 2017 07:25
    • Tag als Antwort aufgehoben 'OCX Montag, 6. Februar 2017 07:34
    Samstag, 4. Februar 2017 23:17
  • Hallo Roland,

    das wäre die Lösung meines Problems gewesen. So hatte ich es auch anfangs mal versucht. In der normalen Ansicht funktioniert der Code auch. Nur leider habe ich keine Möglichkeit gefunden, diesen Code in der Folienmaster-Ansicht umzusetzen:

    ActivePresentation.Slides(2).Select

    funktioniert.

    ActivePresentation.Designs(2).SlideMaster.Select

    funktioniert nicht, weil Select erst gar nicht bereitsteht.

    Grüße

    Martin

    Montag, 6. Februar 2017 07:51
  • in dem Fall dann eben  nur über die Shape-Variable:

    Dim shp as Shape
    
    shp = ActivePresentation.Designs(2).SlideMaster.Shapes(1)
    shp.xxxx = "...."

    oder

    Dim dsgn As Design
    
    Set dsgn = ActivePresentation.Designs(2)
    
    dsgn.SlideMaster.xxx = ....
    

    Grüße

    Roland

    Montag, 6. Februar 2017 12:29
  • Ok, danke.

    Viele Grüße

    Martin

    Montag, 6. Februar 2017 21:35