Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 850
  • Last Modified:

VBA to Automatically Start Animation

0
Eirman
Asked:
Eirman
  • 4
  • 3
1 Solution
 
Jamie GarrochPowerPoint Consultant & DeveloperCommented:
Try this Eirman:

' ===================================================================================
' PowerPoint VBA Macro
' Author : Jamie Garroch
' Date : 19DEC2014
' Copyright (c) 2014 GMARK Ltd. http://youpresent.biz
' Source code is provide under Creative Commons Attribution License
' This means you must give credit for our original creation in the following form:
' "Includes code created by GMARK Ltd. (YOUpresent.biz)"
' Commons Deed @ http://creativecommons.org/licenses/by/3.0/
' License Legal @ http://creativecommons.org/licenses/by/3.0/legalcode
' ===================================================================================
' Purpose : make the shape-implemented timer trigger automatically
' Dependencies : A shape-stack Countdown Timer from A6 Training & Consultancy Ltd.
'                http://www.a6training.co.uk/resources_powerpoint.php
'                http://www.a6training.co.uk/resources/ImprovedPowerPointTimers.pptx
' Usage : 1. Select and copy all the shapes in a timer shape stack
'         2. Paste the shape stack to a slide without any other animation*
'         3. With the shape stack selected on the target slide, press
'            Alt-F8 and run the MakeTimerAutomatic macro
'
' Tested with the 60 second stack on slide 4 only
' * The code could be modified to check the relevant sequence as required
'
' How it works:
'   - The user copies and pastes the shape stack to a target slide
'   - The macro looks at each animation effect in the interactive (trigger) sequence
'   - Each effect is copied and recreated in the main timeline sequence
'   - All effects in the interactive sequence are deleted
' ===================================================================================

Option Explicit

Sub MakeTimerAutomatic()

  ' Do some basic selection checks
  If Not ActiveWindow.Selection.Type = ppSelectionShapes Then GoTo selectionError
  If Not ActiveWindow.Selection.ShapeRange.Count > 0 Then GoTo selectionError

  Dim oShp As Shape
  Dim oSld As Slide
  Dim effectShape As Shape, effectType As MsoAnimEffect, effectDuration As Single, effectDelay As Single, effectExit As Boolean
  Dim effectID As Integer
  Dim oEffect As Effect
  Dim iEffects As Integer
  
  ' Get a reference to the slide on which the selection was made
  Set oSld = ActiveWindow.Selection.ShapeRange.Parent
  
  ' Loop through each animation effect in the interactive trigger sequence, copying its parameters before recreating the effect in the main sequence
  With oSld.TimeLine.InteractiveSequences(1)
    iEffects = oSld.TimeLine.InteractiveSequences(1).Count
    For effectID = 1 To .Count
      ' Copy the relevant animation effect properties from the interactive trigger sequence
      effectType = .Item(effectID).effectType
      effectDuration = .Item(effectID).Timing.Duration
      effectDelay = .Item(effectID).Timing.TriggerDelayTime
      effectExit = .Item(effectID).Exit
      Set effectShape = .Item(effectID).Shape
      ' Add a new effect to the main (non-interactive) sequence
      Set oEffect = oSld.TimeLine.MainSequence.AddEffect(effectShape, effectType, , msoAnimTriggerAfterPrevious)
      oEffect.Exit = effectExit
      oEffect.Timing.TriggerDelayTime = effectDelay
    Next
  End With
  
  ' Delete the effects from the interactive trigger sequence (need to count backwards in the collection)
  For effectID = oSld.TimeLine.InteractiveSequences(1).Count To 1 Step -1
    oSld.TimeLine.InteractiveSequences(1).Item(effectID).Delete
  Next
  
  ' Provide the user with feedback
  MsgBox iEffects & " animation effects have been converted from the interactive trigger sequence to the main timeline sequence.", _
    vbInformation + vbOKOnly, "Macro by youpresent.biz"
Exit Sub

selectionError:
  MsgBox "Please select a group of shapes representing a timer.", vbCritical + vbOKOnly, "Selection Error"
End Sub

Open in new window

0
 
EirmanAuthor Commented:
I'm used to VBA in Access.  I can pop code into the OnLoad event of a form or whatever.
In PowerPoint I can only seem create a module which is stand-alone. (I've only been using PP for a few hours)

Where do I put the code Jamie?
0
 
Jamie GarrochPowerPoint Consultant & DeveloperCommented:
Ah - sorry Eirman. Assumption is a bad habit!

Check out our article if you've never used VBA before:

http://youpresent.biz/copy-vba-macro-powerpoint-windows-mac/
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
EirmanAuthor Commented:
I'm working with a new clean file.
I tried the Alt+F8 and it worked ...... once. When I save .... close .... open it doesn't work.

Perhaps something simpler, after all, it only needs a single click to get things started.
0
 
Jamie GarrochPowerPoint Consultant & DeveloperCommented:
That's expected behaviour.

When you insert VBA code into a Microsoft Office file it must be saved using one of the macro-enabled formats. For example, in PowerPoint you could use .pptm. If you try to use the default .pptx extension then the VBA project is removed before the file is saved. You could develop your presentation in "macro mode" and then save it as a .pptx when you've finished.

So the VBA code works :-)
0
 
EirmanAuthor Commented:
I've requested that this question be closed as follows:

Accepted answer: 0 points for Eirman's comment #a40509185

for the following reason:

Got it .... thanks .... nice coding and commentary.
0
 
EirmanAuthor Commented:
Got it .... thanks .... nice coding and commentary.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now