「Excel VBA PowerPoint スライドショー後閉じる」といったキーワードでのアクセスがありました。
ExcelからマクロでPowerPointファイルを開いてスライドショーを実行、スライドショーが終わったらそのファイルを閉じる、そんな作業を行いたいのだろうと思います。
PowerPointファイルを閉じた後もそのままマクロで処理を続行したいのか、スライドショーが終わればそのままマクロの処理も終わるのかで大分処理が変わってきますが、とりあえず、そのままマクロでの処理を続行したい場合は下記のようなコードで対応できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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オブジェクトの数で判断することもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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ファイルを開くと同時にスライドショーを実行すれば良いので、下記のようにコマンド ライン スイッチで対応することができます。
1 2 3 4 | Public Sub Sample3() Const PptFilePath As String = "C:\Test\Sample.pptx" Shell "POWERPNT.exe /S " "" & PptFilePath & "" "" End Sub |
ファイル形式をスライド ショー形式(*.ppsx、*.ppsm、*.pps)にしておけば、コマンド ライン スイッチすら不要になります。
1 2 3 | Public Sub Sample4() CreateObject( "Shell.Application" ).ShellExecute "C:\Test\Sample.ppsx" End Sub |
以上、PowerPoint以外のOfficeアプリケーションからスライドショーを実行して、スライドショーが終わったらファイルを閉じるマクロの紹介でした。
この記事へのコメントはありません。