VBA-Impulsanimation in PowerPoint 2013 mit Excel 2013

3

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:

  1. Gibt es eine Option, um die Impulsanimation anzuwenden? Ich konnte es im Bibliotheksbereich von msoAnimEffect nicht finden.

  2. 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:

ExcelBeispiel

Techgique
quelle

Antworten:

1

Nachdem ich mit einem Freund gesprochen hatte, konnte ich die Dinge zum Laufen bringen und selbst ein wenig mehr Würze hinzufügen.

Hier ist der Code, mit dem die Animation funktioniert:

'Neue Variablen
Zeitstempeltext verdunkeln
Dim oeff Als PowerPoint.Effect
Dim oshp Als PowerPoint.Shape
Dim osld As PowerPoint.Slide
'Effekt hinzufügen
Setze oshp = pApp.ActivePresentation.Slides (Shapeslide) .Shapes (Shapename)
Mit pPreso.Slides (Shapeslide)
Setze oeff = .TimeLine.MainSequence.AddEffect (Shape: = Shapes (Shapename), effectID: _
= msoAnimEffectFlashBulb, Trigger: = msoAnimTriggerWithPrevious)
Mit oeff
Dauert 60 Sekunden
.Timing.RepeatDuration = 60
Ende mit
Ende mit

Dann der Teil, der diese Animationen beseitigt (dank CM!)

'Effekt löschen
Setze osld = pPreso.Slides (Formslide)
'Die 28 ist nur, weil ich 28 andere Animationen habe, die passieren sollten
Wenn osld.TimeLine.MainSequence.Count> 28 Dann
Für i = osld.TimeLine.MainSequence.Count To 29 Schritt -1
Setze oeff = osld.TimeLine.MainSequence (i)
Wenn oeff.Shape.Name Wie shapename Dann
oeff.Delete
End If
Weiter i
End If

Hoffe, das hilft einigen Leuten da draußen.

Als Bonus habe ich der Folie einen Zeitstempel hinzugefügt, damit ich sehen kann, wann der Status das letzte Mal mit diesem Code aktualisiert wurde (das Objekt ist Textfeld 28 auf allen Folien und der Zeitstempel ist die Funktion "NOW ()" in Excel in Zelle H25):

Hinweis: Dies ist in der Main For-Schleife, aber außerhalb der Main If / Else = "DN".

timestamptext = (Sheet1.Range ("H" & 25) .Text)
pPreso.Slides (Formslide) .Shapes ("Textfeld 28"). TextEffect.Text = Zeitstempeltext

Techgique
quelle