forTeesSake Geschrieben 23. September 2005 Geschrieben 23. September 2005 hi und hallo, habe folgendes anliegen in Power Point 2003: - ich habe ein rechteck - beim klick auf das rechteck soll dieses sich um 200 pixel nach rechts bewegen (als beispiel) - es soll aber dorthin "fahren", also nicht springen (das wäre ja easy) - das ganze muss über VBA geregelt werden, weil später daraus eine viel komplexere dynamiche anwendung werden soll. ich habe lange im netz zum thema gesucht, aber nichts befriedigendes gefunden. nein halt! ich habe doch was gefunden aber ich kapier da was nicht. ich poste mal den kompletten code: Sub ZoomToZoomer(sh As Shape) Const speed = 20 Dim l As Integer, t As Integer, h As Integer, w As Integer, pos As Variant On Error Resume Next ' see if we have the basic position pos = Split(sh.AlternativeText) If UBound(pos) <> 4 Then ' we haven't top,left,height, width - save it sh.AlternativeText = sh.Left & " " & sh.Top & " " & sh.Height & " " & sh.Width If sh.HasTextFrame Then sh.AlternativeText = sh.AlternativeText & " " & sh.TextFrame.TextRange.Font.Size pos = Split(sh.AlternativeText) End If 'is shape in basic position If pos(0) = sh.Left Then With ActivePresentation.SlideShowWindow.View.Slide l = .Shapes("Zoomer").Left If Err.Number <> 0 Then ' has no Zoomer shape, create one Err.Clear .Shapes.AddShape(msoShapeRectangle, 408, 102, 306, 288).Name = "Zoomer" .Shapes("Zoomer").ZOrder msoSendToBack End If l = (.Shapes("Zoomer").Left - sh.Left) / speed t = (.Shapes("Zoomer").Top - sh.Top) / speed h = (.Shapes("Zoomer").Height - sh.Height) / speed w = (.Shapes("Zoomer").Width - sh.Width) / speed On Error GoTo 0 sh.ZOrder msoBringToFront For i = 1 To speed sh.Left = sh.Left + l sh.Top = sh.Top + t sh.Height = sh.Height + h sh.Width = sh.Width + w If sh.HasTextFrame Then sh.TextFrame.TextRange.Font.Size = sh.TextFrame.TextRange.Font.Size + 1 DoEvents Next sh.Left = .Shapes("Zoomer").Left sh.Top = .Shapes("Zoomer").Top sh.Height = .Shapes("Zoomer").Height sh.Width = .Shapes("Zoomer").Width End With Else 'put shape to basic position sh.Left = pos(0) sh.Top = pos(1) sh.Height = pos(2) sh.Width = pos(3) If sh.HasTextFrame Then sh.TextFrame.TextRange.Font.Size = pos(4) End If End Sub im endeffekt passiert hier folgendes: - beim klick auf das übergebene "sh" object, das ein shape ist fährt dieses auf die position des "zoomer" shapes und skaliert sich dabei. - also im grunde genau das was ich will. - man kann sogar die geschwindigkeit der bewegung einstellen. was ich aber nicht verstehe: wo findet denn die zeitliche verzögerung, also genau das "fahren" statt? die animation an sich ist ja hier zu finden For i = 1 To speed sh.Left = sh.Left + l sh.Top = sh.Top + t sh.Height = sh.Height + h sh.Width = sh.Width + w If sh.HasTextFrame Then sh.TextFrame.TextRange.Font.Size = sh.TextFrame.TextRange.Font.Size + 1 DoEvents Next aber das alleine in meine anwendung angebaut lässt natürlich mein rechteck auch nur wieder springen... wäre sehr glücklich über jeden anstoss Zitieren
forTeesSake Geschrieben 23. September 2005 Autor Geschrieben 23. September 2005 oder vielleicht gibt es eine möglichkeit über einen timer die for schleife zu verlangsamen. aber ein timer steuerelement scheint es in vba ja nicht zu geben oder? ich stelle mir das so for for i = 1 to targetX thisX = thisX + 1 wait(200) 'hier 200mx warten um motion effekt zu simulieren next zwar sehr dirty wie ich meine aber das würde es auch tun. weiss da jemand was? Zitieren
forTeesSake Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 hier nun die (etwas verwirrende aber funktionierende) lösung der "nicht-vba-teil" - man baut sich ein menü aus mehreren objekten - man gruppiert das menu - man baut zwei buttons einen für rein, einen für rausfahren - man belegt die buttons mit triggern - und legt darauf benutzerdefinierte animationen für das menü der vba teil - man baut sich einen eventhandler der beim folienwechsel das gruppierte menü egal wohin bewegt. also ich hab halt gesagt "gruppe1" (mein gruppiertes menü), bitte beim folienwechsel auf x = -irgendwas springen. lustigerweise ist der "irgendwas" wert tatsächlich egal. kann bei -1 oder +5 liegen. wurscht. die benutzerdefinierte animation merkt offensichtlich dass das objekt angefasst wurde und startet somit wieder im urzustand... hoffe es bringt jemand anderem vielleicht auch was. aber nun zu meinem nächsten problem: Zitieren
forTeesSake Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 ich poste das mal hier um das forum nicht mit ppt threads zu überschwemmen. ich möchte eine folie von einer präsentation in die andere kopieren. eigentlich kein problem, aber leider haben meine folien "layouts". viele unterschiedliche folien haben unterschiedliche "layout" vorgaben, also grössen, farben, positionen. wenn ich nun eine folie in eine andere präsentation kopiere verliert sie das layout. das layout wird zwar mitkopiert aber ich muss es der folie neu zuweisen. auch kein prob im grunde....aaaaaabbberrrr: ein benutzer soll sich aus der quellfolie per vba folien raussuchen und diese als neue zusammenstellung in einer neuen präsentation speichern können. da aber die layout vorgaben verloren gehen sieht dann alles mistig aus. und ich finde nichts, das das layout fest an die folie bindet hat da jemand ne idee? ich habe tatsächlich eine idee im kopf, aber die ist seeeeeehr unfein und benötigt angaben in z.b. einer xml-datei die ausgelesen werden muss. vielleicht gibts irgendeinen trick oder so.. *verzweifelt an powerpoint vba* Zitieren
forTeesSake Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 so, nach einigem weiterforschen und rumkrepieren habe ich mir einen workaround ausgedacht. für die dies interessiert: - anstatt eine neue präsentation zu erzeugen wird die aktuelle präsentation unter neuem namen gespeichert. - dann werden alle unbenötigten folien rausgeworfen - somit bleiben alle masterfolien, farbschemata, layouts und und und erhalten. easy peasy..freu Zitieren
forTeesSake Geschrieben 17. Oktober 2005 Autor Geschrieben 17. Oktober 2005 hi und hallo, ich habe eine powerpointpräsentation die aus 30 folien besteht. über ein vba menü lasse ich einem benutzer eine neue präsentation aus den vorhandenen folien zusammenstellen. ich habe ein (simuliertes) menü, das aus so vielen einträgen (= rechtecken) besteht wie der benutzer folien ausgewählt hat. diese menüeintrage werden am ende der automatischen generierung zu einer gruppe namens "groupMenu" zusammengefügt. es gibt für dieses menü 2 generierte trigger, die den effekt einfliegen/ausfliegen besitzen, damit der benutzer später das menü ein bzw. ausfahren kann. damit das menü wenn es auf, sagen wir seite 1 ausgefahren, ist und der benutzer auf seite 2 gewechselt ist, beim zurückkehren auf seite 1 wieder eingefahren ist, habe ich folgenden code auf die gruppe "groupMenu" gelegt: Sub Auto_NextSlide(Index As Long) Dim iCount Dim slideNumber For slideNumber = 1 To ActivePresentation.Slides.Count With ActivePresentation.Slides(slideNumber).Shapes("groupMenu").AnimationSettings .Animate = msoTrue 'DAS ERZEUGT DEN FEHLER .EntryEffect = ppEffectNone 'DAS ERZEUGT DEN FEHLER End With Next End Sub bei jedem seitenwechsel wir dann das menü auf jeder folie erst einmal wieder "ausgeblendet" das funktioniert hervorragend. nun das problem: auf manchen folien sind "manuelle" animationen eingefügt. das heisst z.b. reinfliegende wörter, unterstreichungen und hervorhebungen die zeitlich aufeinander abgestimmt sind. ----->und genau diese zeitliche abstimmung geht nach dem ausführen der o.g. animation verloren!! wenn also auf der folie für manche objekte eine zuordnung in der ERWEITERTEN ZEITACHSEN ANSICHT vorhanden ist, wird diese komplett überschrieben und die animation werden dann nur noch strikt nacheinander ausgeführt. kann mir irgendwer irgendwie weiterhelfen und mir sagen was ich tun muss, dass die erweiterten zeitachseneinstellungen vorhanden bleiben, obwohl ich die o.g. funktion ausführe? ich weiss, das ist alles sehr speziell, aber ich kann mir ncht vorstellen dass noch niemand auf dieses problem (oder vllt sogar bug?) gestossen ist... vielen dank im vorraus Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.