仲間からプレゼンを自動で行いたいが、プレゼンの総時間がわからないかと問い合わせがありました
なぜ総時間を知りたいかというと、バックグラウンドミュージックを流すのですが、流しっぱなしにすると最後でプッツンと終わってしまうので、音をフェードアウトし静かに終わりたいとのことです
オーディオをクリックして再生でフェードアウトを設定
再生・バックグラウンドで再生
右クリック・トリム 再生時間を設定します
設定
- 画面切り替え・画面切り替えのタイミング・自動で秒数を設定します
- すべてに適用:とりあえずすべてのスライドで同じ秒数にします
- 表示・スライド一覧で表示されるスライドの右下に秒数が表示されます
- 今回の例では13スライド*3秒で39秒です
実際に動かすと61秒になります
二つことが反映されていません
- 画面切り替えの継続時間
- スライドに含まれるシェイプのアニメーション時間と遅延時間
これらはスライドの実総時間にプラスされます
この時間を取得するのが簡単にできなかったのでVBAで取得することにしました
このプログラムを作るのに必要な情報がまとまっているところはなかったですので探すのに大変苦労しました。
そもそもプレゼンの総時間がどんな項目で規定されているかという情報自体を見つけることができませんでしたので、設定をいろいろと変えてみて作業をしました
定義プレゼンの総時間は下記の4っつの総和になります
- 画面切り替え:画面切り替えのタイミング:自動で設定される秒
- 画面切り替え:期間
- シェイプアニメーション遅延時間
- シェイプアニメーション継続時間
Sub 自動スライドショー表示時間取得()
Dim sld As Slide
Dim time_tmp As Single
Dim time_sum As Single
Dim ShapeWaitSec
Dim durationsec As Double
Dim numDU As Double
time_sum = 0
For Each sld In ActivePresentation.Slides
With sld
'スライドの画面切り替えタイミング自動時間の取得
time_tmp = .SlideShowTransition.AdvanceTime
'継続時間取得
tsdu = .SlideShowTransition.Duration
'シェイプのアニメーション遅延時間取得
ShapeWaitSec = 0
For Each shp In sld.Shapes
If shp.AnimationSettings.Animate And (shp.AnimationSettings.AdvanceTime <> 9.223372E+15 Or shp.AnimationSettings.AdvanceTime <> 0) Then
ShapeWaitSec = ShapeWaitSec + shp.AnimationSettings.AdvanceTime
End If
Next shp
time_sum = time_sum + time_tmp + tsdu + ShapeWaitSec
End With
'シェイプのアニメーション継続時間取得
n = sld.TimeLine.MainSequence.Count
If n > 0 Then
For k = 1 To n
numDU = numDU + sld.TimeLine.MainSequence.Item(k).Timing.Duration
' Debug.Print sld.SlideIndex & ": " & k & " " & numDU
Next
End If
Next sld
w = time_sum + numDU
MsgBox "総表示時間は、" & Int(w) & "秒です。"
End Sub