Ich hoffe ich bin in der richtigen SE. Die Posts, die ich gefunden habe, haben mich angewiesen, hier zu posten.
BLUF: Ich versuche eine if / else-Anweisung zu verwenden, um die Impulsanimation auf ein bestimmtes Objekt in PowerPoint anzuwenden / zu entfernen.
Hintergrund: Der Code basiert auf einem Excel-Dokument, da ich es als einfache, bildliche Firewall verwende, um Mitarbeiter davon abzuhalten, mit Folien herumzuspielen. Ich möchte ein Live-Update-Dokument, das Informationen in eine laufende PowerPoint-Folie überträgt und den Text in Bezug auf den Status eines bestimmten Site-Status (nach oben oder unten) aktualisiert. Ich habe eine einfache Auf- / Ab-Taste erstellt, die nur zwischen UP / DN in der Zelle wechselt und diese in andere Zellen eingibt, um zu bestimmen, was mit den Daten geschehen soll. DANN führt eine Makroschaltfläche den Code aus und aktualisiert den Text in PowerPoint.
Gute Nachricht: Alles funktioniert super (abgesehen von der Animation). Der Text ändert sich (Wörter und Farbe), während PowerPoint ausgeführt wird, und das Sperren des Excel-Dokuments verhindert, dass Mitarbeiter mit Einstellungen herumspielen.
Hauptteil des fraglichen Codes:
For Each c In Sheet1.Range("a2:a" & Sheet1.Range("a" & Rows.Count).End(xlUp).Row)
shapeslide = Sheet1.Range("a" & c.Row)
shapename = Sheet1.Range("b" & c.Row)
shapetext = (Sheet1.Range("c" & c.Row).Text)
friendlyname = Sheet1.Range("d" & c.Row)
pPreso.Slides(shapeslide).Shapes(shapename).TextEffect.Text = shapetext
If (friendlyname = "DN") Then
pPreso.Slides(shapeslide).Shapes(shapename).TextFrame.TextRange.Font.Color.RGB = RGB(255, 0, 0)
'The porttion below worked, but it is not animation (not as cool)
'pPreso.Slides(shapeslide).Shapes(shapename).TextEffect.PresetTextEffect = 4
'pPreso.Slides(shapeslide).Shapes(shapename).TextEffectFormat = msoAnimEffectBoldFlash
Else
pPreso.Slides(shapeslide).Shapes(shapename).TextFrame.TextRange.Font.Color.RGB = RGB(0, 255, 0)
End If
Next c
Die for-Anweisung durchläuft die Zellen, in denen ich die spezifische Folie, Form und Formtext aufrufe. Der Anzeigename ist eine Wiederholung, um IF / Else auszuführen.
Wenn ich den Status in DN ändere, wird er rot. Wenn ich ihn in UP ändere, wird er grün.
Ich konnte eine Animation mit diesem Code im If / Else anwenden lassen:
Dim oeff As Effect
Dim osld As Shape
Set osld = ppapp.ActivePresentation.Slides(shapeslide).Shapes(shapename)
With pPreso.Slides(shapeslide)
Set oeff = .TimeLine.MainSequence.AddEffect(Shape:=.Shapes(shapename),_ effectID:=msoAnimEffectBoldFlash, trigger:=msoAnimTriggerAfterPrevious)
With oeff
.Timing.RepeatDuration = 25
End With
End With
Das Hauptproblem ist, dass die Animation (verständlicherweise) ständig angewendet wird, da offensichtlich nicht überprüft wird, ob sie in diesem Code angewendet wird. Zweitens, als ich versucht habe, oeff.delete einzuführen, hat es die Animation einfach verlassen und dann eine Nicht-Animation auf alle anderen angewendet, die im Animationsfenster von PowerPoint als "UP" markiert sind.
Also, 2 Dinge:
Gibt es eine Option, um die Impulsanimation anzuwenden? Ich konnte es im Bibliotheksbereich von msoAnimEffect nicht finden.
Hat jemand eine elegante Möglichkeit, eine Animation mit dieser von mir erstellten Methode zu aktivieren oder zu deaktivieren, oder muss ich eine Möglichkeit finden, um Flags zu setzen, diese Flags zu lesen und diese dann irgendwie in die If / Else-Anweisung zu integrieren?
Hier ist ein Bild des Excel-Dokuments: