【入門編】【マルチディスプレイ対応】VBAで制御するスライドショーの表示ディスプレイ指定と、発表者ツールの表示・非表示コントロール – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押して「動いたはいいけれど、中身がさっぱり分からない…」そんなモヤモヤを抱えていませんか?

今回は、多くの現場で「地味に困る」と悩まされるマルチディスプレイ環境でのスライドショー制御をテーマに取り上げます。
「メインモニターではなく、サブモニターに全画面で発表者ツール付きで表示させたい!」
「会議室のプロジェクターにだけスライドを飛ばしたい!」

ここをクリアすれば、PowerPoint VBAのオブジェクトモデルの本質が見えてきます。温かく、そして実務で即戦力になる知識を一緒に紐解いていきましょう。

1. PowerPoint VBAの心臓部:オブジェクトモデルの階層構造を理解する

まず、VBAでPowerPointを操るための「地図」を確認します。Excelが「セル(Cell)」の集合体であるのに対し、PowerPointは「プレゼンテーション(Presentation)」の中に「スライド(Slide)」があり、それを「スライドショー(SlideShow)」としてどう見せるかという階層構造になっています。

Application (PowerPointアプリ全体)
┗ Presentations (開いているファイルたち)
┗ Presentation (操作対象のファイル)
┗ SlideShowSettings (スライドショーの設定・制御の心臓部)
┣ StartingSlide / EndingSlide (開始・終了スライド)
┣ ShowPresenterView (発表者ツールの有無)
┗ Run (ショーの実行)

私たちが今回焦点を当てるのは、この階層のなかでも`SlideShowSettings`(スライドショー設定)というオブジェクトです。ここを自由自在に操れるようになると、ディスプレイの指定から表示方法まで、すべてをコードの意のままにコントロールできるようになります。

2. なぜマルチディスプレイ制御でつまずくのか?(陥りやすい罠)

PowerPointのスライドショーをVBAで起動する際、最もシンプルなコードはこれです。

ActivePresentation.SlideShowSettings.Run

しかし、これをマルチモニター環境(ノートPC + 外付けモニターなど)で実行すると、大抵の場合「こっちに出てほしいディスプレイとは逆側の画面」や「予期せぬウィンドウサイズ」で起動してしまいます。

原因は、PowerPointが標準で「プライマリモニター」と判定された画面にスライドショーを描画しようとする仕様にあります。「どのディスプレイの何番を使うか」をVBA側で明示的に指定してあげる必要があるのです。

3. 実践コード:狙ったディスプレイで発表者ツール付きスライドショーを起動する

それでは、実務でそのまま使える堅牢なプロシージャを公開します。
このコードでは、指定したモニター番号(例えば2画面あるなら2番目のモニター)に全画面のスライドショーを展開し、同時に「発表者ツール(PresenterView)」を有効にするロジックを組み込んでいます。

Sub StartPresentationOnTargetMonitor()
Dim targetMonitor As Long
targetMonitor = 2 ‘ ← ここに表示させたいディスプレイの番号を指定します(例: 2番目のモニター)

‘ エラーハンドリングの準備
On Error GoTo ErrorHandler

‘ 1. 開いているプレゼンテーションが存在するかチェック
If Documents.Count = 0 Then
MsgBox “プレゼンテーションが開かれていません。”, vbExclamation, “エラー”
Exit Sub
End If

‘ 2. スライドショー実行中のウィンドウがあれば事前に閉じる(二重起動防止)
If SlideShowWindows.Count > 0 Then
SlideShowWindows(1).View.Exit
End If

‘ 3. SlideShowSettingsオブジェクトを変数に格納してスマートに操作
Dim ssSettings As SlideShowSettings
Set ssSettings = ActivePresentation.SlideShowSettings

With ssSettings
‘ 発表者ツールを使用する(True: 表示する / False: 表示しない)
.ShowPresenterView = True

‘ 表示先のモニター番号を指定
‘ ※注意: ディスプレイ番号はWindowsの「ディスプレイ設定」に依存します
.StartingSlide = 1
.EndingSlide = ActivePresentation.Slides.Count

‘ 4. スライドショーの実行とモニターの割り当て
‘ Runメソッドを実行すると、SlideShowWindowsコレクションに新しいウィンドウが生成されます
Dim ssWindow As SlideShowView
Set ssWindow = .Run.View
End With

‘ 補足:特定のディスプレイに明示的にスライドショーウィンドウを移動させたい場合のテクニック
‘ (PowerPointのバージョンや環境によっては、ディスプレイ設定ダイアログでの事前設定が優先されます)

Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “システムエラー”
End Sub

コードの重要ポイント解説

1. `ShowPresenterView = True`
これが今回のキモです。デュアルモニター環境において、手元のノートPCには「次のスライドやメモ(発表者ツール)」を表示させ、プロジェクター側には「スライド本編」をフルスクリーンで映し出す、あのプロ仕様の画面構成をVBAから強制有効化します。
2. `SlideShowWindows.Count > 0` による二重起動ガード
すでにスライドショーが走っている状態で再度マクロを実行すると、PowerPointが混乱してエラーを起こす原因になります。実務で使うコードには、こうした「現在の状態を掃除する(クリーンアップする)処理」を必ず挟むのがプロの作法です。

4. 現場で役立つ知見:マルチディスプレイの「番号」に関する注意点

ここで一つ、現場で開発するエンジニアとして絶対に知っておくべき「罠」をお伝えしておきます。

VBAで指定するモニター番号(上記の `targetMonitor = 2` など)は、WindowsのOS側が認識しているディスプレイの識別番号と連動しています。
ユーザーの環境が変わったり、ドッキングステーションの抜き差しを行ったりすると、この「1番」「2番」の割り振りが変わってしまうことがあります。

より厳密に制御したい大規模なプレゼン自動化ツールを作る場合は、以下のような設計アプローチも検討してください:

  • あらかじめ設定シート(ExcelやPowerPoint内の隠しスライド)に「使用するモニター番号」を保持させておく。
  • 起動時に `Application.DisplaySettings` や Windows API を叩いて接続モニター数を動的に取得し、存在しないモニター番号を指定された場合にフォールバック(自動で1番に変更)させる。

おわりに:ここをクリアすれば、PowerPoint VBAは怖くない!

今回は、マルチディスプレイ環境におけるスライドショーの表示制御と、発表者ツールのコントロールについて解説しました。

「マクロの記録」では絶対に生成されない、こうしたオブジェクトの組み合わせやプロパティの操作こそが、VBAプログラミングの醍醐味です。ここをマスターしたあなたなら、社内のプレゼン業務を自動化するツールや、自動キオスク端末のようなサイネージシステムさえも自力で構築できるはずです。

「ここをもっと深掘りしたい」「こんな応用はできる?」といった疑問があれば、いつでもまた扉を叩いてください。
あなたのVBAライフが、よりスマートで快適なものになりますように。エンジニアリングの旅を、一緒に楽しんでいきましょう!

タイトルとURLをコピーしました