展示会ブース、無人の受付カウンター、あるいはオフィスのデジタルサイネージ。
キオスク端末として常時稼働させるPowerPointにおいて、「人手を介さず、意図した通りの設定で完璧にループし続けること」は、システム全体の信頼性に直結する絶対要件だ。
GUIのマウスクリックで設定ファイルをポチポチと手動構築する?
プロのエンジニアがそのような属人性的かつ再現性の低いアプローチを取るべきではない。スライドショーの設定から保存フォーマットの選定まで、すべてをコードで一気通貫に制御し、「ヒューマンエラーの余地をゼロにした自動生成パイプライン」を構築する。
今回は、PowerPoint VBAを用いてキオスク端末向けのスライドショー設定をプログラムで埋め込み、再生専用ファイル(`.ppsx`)としてセキュアに書き出す極限の知見を伝授する。
—
1. なぜGUIの手動設定では破綻するのか?
PowerPointには「スライドショーの設定」というダイアログが存在する。ここで「キオスク表示(フルスクリーン)」や「自動再生」を選ぶことは容易だ。しかし、実務の現場では以下の課題に直面する。
- 環境依存の崩壊: 担当者が変わると設定を忘れたり、間違ったチェックボックスを外したりして、展示会当日に「ESCキーで抜けてしまう」「勝手に終わってしまう」という致命的な事故が起きる。
- 拡張子の罠: 普通に保存すると `.pptx`(編集用)になり、端末のユーザーが誤ってファイルを改変してしまうリスクが残る。
- マルチディスプレイ環境の制御: どのモニターで全画面表示させるのか、ハードウェアの構成が変わった際にGUIのデフォルト設定では追従しきれない。
これらをコード(VBA)によって「強制アプリーチ」で解決する。プログラムの実行ボタンを押すだけで、誰がやっても100%同じ「キオスク専用バイナリ」が生成される仕組みを作るのだ。
—
2. アーキテクチャの核心:`SlideShowSettings` の全貌
PowerPoint VBAにおけるスライドショーの設定は、`Presentation.SlideShowSettings` オブジェクトに集約されている。ここをどうハックするかで、自動プレゼンテーションのクオリティが決まる。
キオスク端末向けに最適化するために、コードでは以下のプロパティを厳密に制御する。
1. `ShowType`: プレゼンテーションの形式。単に全画面にするだけでなく、ウィンドウ操作を受け付けない「キオスクモード(`ppShowTypeKiosk`)」を指定する。
2. `LoopUntilStopped`: 「ESCが押されるまで継続的にループ」させるためのフラグ。
3. `AdvanceMode`: スライドの切り替えタイミング。手動ではなく、「タイミング اگه存在する場合はそれに従う、または強制的に一定時間で送る(`ppSlideShowUseSlide Timings`)」に設定する。
4. `RangeType`: 全スライドを対象にする(`ppShowAll`)。
非効率なコードのアンチパターン
よくある間違いが、アクティブウィンドウや不完全なオブジェクト参照に依存したコードだ。
‘ 【悪手】これではどのプレゼンテーションを指しているか曖昧であり、バグの温床となる
ActivePresentation.SlideShowSettings.LoopUntilStopped = msoTrue
大規模な自動化や、バックグラウンドでのファイル一括変換・調整を行う場合、明示的に `ActivePresentation` ではなく、開いた、あるいは新しく生成した `Presentation` オブジェクトを変数に格納し、スコープを明確にした上で操作しなければならない。
—
3. プロダクションコード:キオスク専用 `.ppsx` 自動生成マクロ
以下のコードは、現在アクティブな(あるいは指定した)プレゼンテーションに対し、キオスク端末向けの鉄壁な設定をプログラムで流し込み、編集不可の「PowerPoint スライドショー形式(`.ppsx`)」として出力する完全版のプロシージャだ。
実務の現場でそのまま組み込めるよう、エラーハンドリングとファイル上書き時の競合対策も実装している。
Option Explicit
‘ ==============================================================================
‘ 処理名 : ExportForKioskTerminal
‘ 概要 : 現在のプレゼンテーションにキオスク端末用のスライドショー設定を強制適用し、
‘ 編集不可の .ppsx 形式として安全にエクスポートする。
‘ 備考 : 展示会・受付端末向けの自動ループ再生に最適化
‘ ==============================================================================
Public Sub ExportForKioskTerminal()
Dim targetPres As Presentation
Set targetPres = ActivePresentation
‘ 念のため、未保存の新規ファイルなどの場合はガードする
If targetPres.Path = “” Then
MsgBox “このプレゼンテーションはまだ保存されていません。” & vbCrLf & _
“一度適当な場所に保存してから実行してください。”, vbCritical, “致命的なエラー”
Exit Sub
End If
On Error GoTo ErrorHandler
‘ ————————————————————————–
‘ 1. スライドショー設定のハードニング(キオスク最適化)
‘ ————————————————————————–
With targetPres.SlideShowSettings
‘ プレゼンテーションの形式を「キオスク表示(全画面・ウィンドウなし)」に設定
.ShowType = ppShowTypeKiosk
‘ 組織的なループ再生(ESCキーで強制終了されるまで無限ループ)
.LoopUntilStopped = msoTrue
‘ スライドの切り替えタイミングは「保存されたタイミング」に依存させる
‘ ※各スライドの「画面切り替え」タブで「自動切替:〇秒後」が設定されている前提
.AdvanceMode = ppSlideShowUseSlideTimings
‘ 全スライドを対象範囲にする
.RangeType = ppShowAll
‘ ナビゲーションバーやペン等のUIを非表示にする(キオスクでは不要)
.ShowWithNarration = msoTrue
.ShowWithAnimation = msoTrue
End With
‘ ————————————————————————–
‘ 2. 保存パスの動的生成(同階層に ‘Kiosk_output’ フォルダを作成して出力)
‘ ————————————————————————–
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
Dim parentDir As String
parentDir = targetPres.Path & “\Kiosk_Output”
‘ 出力用ディレクトリがなければ作成
If Not fso.FolderExists(parentDir) Then
fso.CreateFolder parentDir
End If
‘ 拡張子を除いたファイル名を取得し、.ppsx を付与
Dim baseName As String
baseName = fso.GetBaseName(targetPres.Name)
Dim outputPath As String
outputPath = parentDir & “\” & baseName & “_Kiosk.ppsx”
‘ すでに同名ファイルが存在する場合は削除(上書き保存エラーを防ぐ)
If fso.FileExists(outputPath) Then
Kill outputPath
End If
‘ ————————————————————————–
‘ 3. 再生専用ファイル(.ppsx)としての保存
‘ ————————————————————————–
‘ ppSaveAsShow形式で保存することで、ダブルクリック時に編集画面ではなく
‘ ダイレクトにスライドショーが起動するようになります。
targetPres.SaveAs FileName:=outputPath, FileFormat:=ppSaveAsShow
‘ 完了通知
MsgBox “キオスク端末向けスライドショーの最適化が完了しました!” & vbCrLf & vbCrLf & _
“出力先: ” & outputPath, vbInformation, “処理成功”
GoTo CleanUp
ErrorHandler:
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “システムエラー”
CleanUp:
Set fso = Nothing
Set targetPres = Nothing
End Sub
—
4. チーフアーキテクトが教える、現場で活きる実装の極意
このコードを運用するにあたり、開発者が知っておくべき「実務の急所」をいくつか共有しよう。
① `.ppsx`(スライドショー形式)の強力さ
通常の `.pptx` ではなく、`ppSaveAsShow`(拡張子 `.ppsx`)で保存する最大のメリットは、「ユーザーがファイルをダブルクリックした瞬間に、編集モードをバイパスしてフルスクリーンのスライドショーが直起動する」点にある。受付端末の担当者が誤ってテキストを書き換えてしまったり、アニメーション順序を破壊してしまうヒューマンエラーを物理的にシャットアウトできる。
② スライド側の「自動切り替え時間」の担保
コード内で `.AdvanceMode = ppSlideShowUseSlideTimings` を指定している通り、キオスク端末で自動ループさせるためには、各スライド自体に「何秒後に次のスライドへ進むか」のタイマーが設定されていなければ意味がない。
もし、すべてのスライドを一律「5秒ごと」に強制切り替えさせたい場合は、VBA側で以下のように全スライドの `SlideShowTransition.AdvanceTime` をループで一括設定する前処理をコードに組み込むと、さらに堅牢性が増す。
Dim sld As Slide
For Each sld In targetPres.Slides
With sld.SlideShowTransition
.AdvanceOnTime = msoTrue
.AdvanceTime = 5 ‘ すべてのスライドを5秒で強制切替
End With
Next sld
③ マルチモニター環境における「ディスプレイ指定」の罠
企業の受付や展示会では、PC本体から外部モニターや大型サイネージへ映像を出力することが多い。PowerPointのスライドショーを「特定のモニター(例: 2番目のディスプレイ)」で強制再生させたい場合、`SlideShowSettings` オブジェクトには `StartingSlide` などの制御はあるが、ディスプレイ番号の直接指定プロパティは環境によって挙動が複雑化する。
基本的には、Windows側のOS設定で「セカンドモニターをメインディスプレイに設定」した上でキオスク端末を起動する運用と組み合わせるのが、最もバグを生みにくい鉄則である。
—
5. おわりに:自動化の先にある「揺るぎない運用」へ
今回紹介したアプローチは、単なるコードの断片ではない。
「人間の手作業によるオペレーションを信用しない」という、エンジニアリングにおける最重要思想に基づいたものだ。
展示会前日の夜遅く、現地で「スライドショーの設定がループになっていない!」と冷や汗をかく日々は、今日で終わりにしよう。このマクロをあなたのツールボックスに組み込み、一撃で正確無比なキオスクパッケージを生成してほしい。
