Wordなどで作成されたアウトラインからスライドを作成する[アウトラインからスライド]コマンドがPowerPoint 2013からは[挿入]タブにも用意されていること、[アウトラインの挿入]ダイアログを表示するにはアクセスキー[Alt]→[I]→[L]が便利なことをご紹介しました。
普段からWordで構造化された文書を作成している方にとって便利な機能ですが、課題もありそうです。
階層レベルの深いアウトラインの場合に、すべてのアウトラインがスライド内の文字列になってしまうのです。
例えば、元になるアウトラインの設定されたファイルでは、見出しレベルが5まで設定されているけれど、スライドにしたいのは見出しレベルの3まででいいというようなケースも実務ではあるでしょう。
[アウトラインからスライド]コマンドには、どのアウトラインレベルまでをスライドに流用するのかを指定できないのです。
階層の深いインデントレベルの段落を削除するサンプルマクロ
そこで階層の深いインデントレベルの設定された段落を削除するPowerPointマクロをVBA(Visual Basic for Applications)で作成してみました。
[アウトラインからスライド]コマンドで、とりあえずスライドを作ってしまってから、不要な階層の深い段落を削除するマクロです。
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
End Sub
上記のマクロを実行すると、本文プレースホルダの、インデントレベルが3以上の段落が削除され、インデントレベル1と2の段落だけが残ります。
サンプルマクロの注意点
このマクロの注意点は、何といっても
sld.Shapes.Placeholders(2).TextFrame2.TextRange.Paragraphs
の部分です。
TextFrame2オブジェクトのTextRangeプロパティでTextRange2コレクションオブジェクトを取得して、
そのParagraphsプロパティでTextRange2コレクションオブジェクトを取得するオブジェクト式です。
このマクロは段落の削除を行いますから、
For i = .Count To 1 Step -1
と、後ろから前に向かってFor~Nextループを回すほうが、シンプルなコードで済みます。
ところが、TextRangeオブジェクトのほうはちゃんとしたコレクションオブジェクトになっていないために、単一オブジェクトを取得するItemメソッドやItemプロパティが存在していません。
そのため、Itemメソッドの用意されている、
オブジェクトモデル理解の難易度が高いTextRange2オブジェクトを利用しています。
最終更新日時:2020-05-02 08:18
- Newer:リンクされた図・画像を削除するExcelマクロ
- Older:VBAですべてのShapeを選択する
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » インデントレベルが深い段落を削除するPowerPointマクロ