Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » インデントレベルが深い段落を削除するPowerPointマクロ

インデントレベルが深い段落を削除するPowerPointマクロ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013, Windows版PowerPoint2016

Wordなどで作成されたアウトラインからスライドを作成する[アウトラインからスライド]コマンドがPowerPoint 2013からは[挿入]タブにも用意されていること、[アウトラインの挿入]ダイアログを表示するにはアクセスキー[Alt]→[I]→[L]が便利なことをご紹介しました。

普段からWordで構造化された文書を作成している方にとって便利な機能ですが、課題もありそうです。

階層レベルの深いアウトラインの場合に、すべてのアウトラインがスライド内の文字列になってしまうのです。

例えば、元になるアウトラインの設定されたファイルでは、見出しレベルが5まで設定されているけれど、スライドにしたいのは見出しレベルの3まででいいというようなケースも実務ではあるでしょう。

[アウトラインからスライド]コマンドには、どのアウトラインレベルまでをスライドに流用するのかを指定できないのです。

[スポンサードリンク]

階層の深いインデントレベルの段落を削除するサンプルマクロ

そこで階層の深いインデントレベルの設定された段落を削除するPowerPointマクロをVBA(Visual Basic for Applications)で作成してみました。

[アウトラインからスライド]コマンドで、とりあえずスライドを作ってしまってから、不要な階層の深い段落を削除するマクロです。

Sub 本文プレースホルダのインデントレベル3以上の文字列を削除する()
 Dim sld As Slide
 For Each sld In ActivePresentation.Slides

  With sld.Shapes.Placeholders(2).TextFrame2.TextRange.Paragraphs
   Dim i As Long
   For i = .Count To 1 Step -1
    If .Item(i).ParagraphFormat.IndentLevel >= 3 Then
     .Item(i).Delete
    End If
   Next i
  End With

 Next sld
End Sub

上記のマクロを実行すると、本文プレースホルダの、インデントレベルが3以上の段落が削除され、インデントレベル1と2の段落だけが残ります。

サンプルマクロの注意点

このマクロの注意点は、何といっても
  sld.Shapes.Placeholders(2).TextFrame2.TextRange.Paragraphs
の部分です。

TextFrame2オブジェクトのTextRangeプロパティでTextRange2コレクションオブジェクトを取得して、

インデントレベルが深い段落を削除するPowerPointマクロ

そのParagraphsプロパティでTextRange2コレクションオブジェクトを取得するオブジェクト式です。

インデントレベルが深い段落を削除するPowerPointマクロ

このマクロは段落の削除を行いますから、
  For i = .Count To 1 Step -1
と、後ろから前に向かってFor~Nextループを回すほうが、シンプルなコードで済みます。

ところが、TextRangeオブジェクトのほうはちゃんとしたコレクションオブジェクトになっていないために、単一オブジェクトを取得するItemメソッドやItemプロパティが存在していません。

インデントレベルが深い段落を削除するPowerPointマクロ

そのため、Itemメソッドの用意されている、

インデントレベルが深い段落を削除するPowerPointマクロ

オブジェクトモデル理解の難易度が高いTextRange2オブジェクトを利用しています。

最終更新日時:2020-05-02 08:18

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » インデントレベルが深い段落を削除するPowerPointマクロ

「TextFrame・TextRange」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.