「Excel VBA PowerPoint スライドショー後閉じる」といったキーワードでのアクセスがありました。
ExcelからマクロでPowerPointファイルを開いてスライドショーを実行、スライドショーが終わったらそのファイルを閉じる、そんな作業を行いたいのだろうと思います。
PowerPointファイルを閉じた後もそのままマクロで処理を続行したいのか、スライドショーが終わればそのままマクロの処理も終わるのかで大分処理が変わってきますが、とりあえず、そのままマクロでの処理を続行したい場合は下記のようなコードで対応できます。
Public Sub Sample()
Const ppSlideShowDone = 5
With CreateObject("PowerPoint.Application")
.Visible = True
With .Presentations.Open(Filename:="C:\Test\Sample.pptx")
With .SlideShowSettings.Run.View
'スライドショー終了待ち
Do Until .State = ppSlideShowDone
DoEvents
Loop
End With
.Close
End With
.Quit
End With
Debug.Print "処理が終了しました。"
End Sub
スライドショーが終わるまでループで待つ形ですね。
(スライド数が多い場合には、待ち処理にSleepを入れた方が良いです。)
下記のようにSlideShowWindowオブジェクトの数で判断することもできます。
Public Sub Sample2()
Dim pres As Object
With CreateObject("PowerPoint.Application")
.Visible = True
Set pres = .Presentations.Open(Filename:="C:\Test\Sample.pptx")
pres.SlideShowSettings.Run
'スライドショー終了待ち
Do Until .SlideShowWindows.Count < 1
DoEvents
Loop
pres.Close
.Quit
End With
Debug.Print "処理が終了しました。"
End Sub
そして今度はスライドショーが終わったらそのままマクロの処理も終わる場合ですが、これは単にPowerPointファイルを開くと同時にスライドショーを実行すれば良いので、下記のようにコマンド ライン スイッチで対応することができます。
Public Sub Sample3() Const PptFilePath As String = "C:\Test\Sample.pptx" Shell "POWERPNT.exe /S """ & PptFilePath & """" End Sub
ファイル形式をスライド ショー形式(*.ppsx、*.ppsm、*.pps)にしておけば、コマンド ライン スイッチすら不要になります。
Public Sub Sample4()
CreateObject("Shell.Application").ShellExecute "C:\Test\Sample.ppsx"
End Sub
以上、PowerPoint以外のOfficeアプリケーションからスライドショーを実行して、スライドショーが終わったらファイルを閉じるマクロの紹介でした。

















この記事へのコメントはありません。