【PowerPoint VBA】スライド追加の極意:`AddSlide`と`InsertFromFile`を使いこなし、レイアウト崩れを防ぐ技術
こんにちは。業務自動化の深淵へようこそ。
PowerPoint VBAを触り始めると、誰もが最初にぶつかる壁があります。それは「新しくスライドを作ったのに、なぜかデザインが崩れるのか?」という疑問です。
単なるメソッドの羅列はリファレンスに任せましょう。今日は、現場で血を流しながら学んだ「スライド操作の本質」を伝授します。ここを理解すれば、あなたの自動化ツールは「動く」レベルから「実用的で堅牢な」レベルへと進化します。
—
1. そもそも「スライドを作る」とはどういうことか?
PowerPointにおいて、スライドは単なる箱ではありません。「マスター(ひな形)」というDNAを継承するオブジェクトです。
VBAでスライドを扱う際、私たちは主に2つのアプローチを使い分けます。
1. `AddSlide`: 白紙から、あるいは指定したレイアウトで「今ここ」にスライドを生成する。
2. `InsertFromFile`: 外部ファイルから、完成されたスライドを「そのまま」インポートする。
この2つを混同していると、レイアウト崩れの悪夢を見ることになります。
—
2. `AddSlide`:ゼロから「型」を定義する
`AddSlide`は、新規スライドにどの「レイアウト」を適用するかを明示的に指定する必要があります。ここをサボると、デフォルトのレイアウトが割り当てられ、デザインが破壊されます。
実践コード:レイアウトを指定して追加する
Sub AddNewSlideWithLayout()
Dim pptPres As Presentation
Dim pptSlide As Slide
Dim layout As CustomLayout
Set pptPres = ActivePresentation
‘ 2番目のレイアウト(通常はタイトルとコンテンツ)を指定
Set layout = pptPres.SlideMaster.CustomLayouts(2)
‘ インデックス指定でスライドを追加
Set pptSlide = pptPres.Slides.AddSlide(1, layout)
pptSlide.Shapes(1).TextFrame.TextRange.Text = “自動生成されたタイトル”
End Sub
ここがポイント:
`CustomLayouts`のインデックスはファイルによって変わります。「なぜかレイアウトが変わる」という事故を防ぐには、インデックスではなく、レイアウト名で検索する関数を挟むのがプロの現場の作法です。
—
3. `InsertFromFile`:外部から「魂」を移植する
外部ファイルからスライドを挿入する場合、`InsertFromFile`が最適です。特筆すべきは、「ソース側の書式を維持するか」を選択できる点です。
実践コード:書式を維持してインポートする
Sub ImportSlideFromFile()
Dim targetPres As Presentation
Dim sourcePath As String
Set targetPres = ActivePresentation
sourcePath = “C:\Reports\Template.pptx”
‘ 1番目のスライドを最後に挿入
‘ KeepSourceFormatting:=msoTrue にすることで、レイアウト崩れを防ぐ
targetPres.Slides.InsertFromFile _
FileName:=sourcePath, _
Index:=targetPres.Slides.Count, _
Start:=1, _
End:=1, _
KeepSourceFormatting:=msoTrue
End Sub
ここがポイント:
`KeepSourceFormatting:=msoTrue`。これこそが、デザイン崩れを防ぐ魔法のフラグです。これを`msoFalse`にすると、挿入先(親)のマスターデザインに合わせてスライドが強引に再構成され、悲劇が起きます。
—
4. 陥りやすい罠と解決策
罠1:マスターの不一致
外部ファイルと挿入先のマスターデザインが全く異なる場合、`KeepSourceFormatting`を使っても微細なズレが生じることがあります。
- 対策: 可能であれば、インポート元とインポート先の「マスターテンプレート」を統一してください。VBAは魔法ではありません。設計段階でマスターを統一するのが、最も安上がりな自動化です。
罠2:インデックスのズレ
`Slides.Count`を使って末尾に追加する場合、ループ処理中にスライドが削除されるとインデックスが狂います。
- 対策: スライドを操作する際は、`For i = Slides.Count To 1 Step -1` のように逆順ループで回すのが、オブジェクトの整合性を保つ鉄則です。
—
先輩からのアドバイス:自動化の先にあるもの
PowerPoint VBAの難しさは、オブジェクトモデルが「視覚的な直感」と「内部的なデータ構造」の狭間にあることにあります。
- `AddSlide`は、「新しいルール」を追加したいとき。
- `InsertFromFile`は、「既存の資産」を再利用したいとき。
この使い分けができるようになれば、あなたはもうマクロの記録を卒業した一人前のエンジニアです。まずは、ご自身のPCにある適当なPPTXファイルで、`InsertFromFile`を試してみてください。
次に会うときは、さらに一歩踏み込んだ「シェイプ操作の自動化」の話をしましょう。応援していますよ。
