バージョン・2010以降のPowerPointに用意されている、SmartArtを図形に変換するコマンドをご紹介しました。
[図形に変換]コマンドでSmartArtから変換された図形はグループ化された状態になっています。ですが、わざわざShapeに変換したということは、その後、個々のShapeに対して何らかの手作業を行うことになるはずです。
そんなときに使えるPowerPointマクロを作ってみました。
SmartArtをShapeに変換してグループ解除するサンプルマクロ
SmartArtを図形に変換して、グループ解除までを一気に行うマクロです。
Dim shp As Shape
With ActiveWindow.Selection
For Each shp In .SlideRange.Shapes
If shp.HasSmartArt Then
shp.Select
Application.CommandBars.ExecuteMso _
"SmartArtConvertToShapes"
.ShapeRange.Ungroup
Exit For
End If
End With
End Sub
上記のマクロを実行すると、アクティブスライド上の一つ目のSmartArtが図形に変換され、グループ解除が行われます。
サンプルマクロの解説
アクティブなスライド上の、全Shapeを対象としてFor~Each Nextループを回して、
With ActiveWindow.Selection
For Each shp In .SlideRange.Shapes
SmartArtだったときに、
If shp.HasSmartArt Then
そのSmartArtを選択して、
shp.Select
CommandBars.ExecuteMsoメソッドの引数に[図形に変換]を表す「SmartArtConvertToShapes」を指定して実行し、
Application.CommandBars.ExecuteMso _
"SmartArtConvertToShapes"
グループ解除を行って、
.ShapeRange.Ungroup
For Each~Nextループを抜けています。
Exit For
SmartArtオブジェクトに「SmartArtConvertToShapes」「ConvertToShapes」といった名前のメソッドがあってもよさそうなのですが、
それらしきメソッドが残念ながら見当たらないためCommandBars.ExecuteMsoメソッドを利用したマクロにしました。
CommandBars.ExecuteMsoメソッドはFunctionプロシージャではなく何も返さないSubプロシージャですので、
shp.Select
と、事前に選択を行っておいてからCommandBars.ExecuteMsoメソッドを実行してその後、
.ShapeRange.Ungroup
グループ解除を行っています。
PowerPoint VBA入門講座へのアンケートから
『ExcelマクロユーザーのためのPowerPoint VBA入門講座』を開催するにあたって、PowerPointでどんな処理を行うときにマクロを使えたら便利と感じますか?か、というアンケートを採らせていただきました。
そのアンケートの中に
「テキストデータやプレースホルダーに入力された文字列を図形に変換したい」
というSmartArtがイマイチであることに起因する要望がありました。
ご要望どおり、テキストデータやプレースホルダーに入力された文字列から図形を作成するマクロもありですが、最終的に作成したい図版の複雑さによっては、SmartArtを図形に変換して流用するという考え方もあるように感じます。
その場合に今回ご紹介したマクロは使えるのではないかと考えています。
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Shapesコレクション・Shapeオブジェクト » SmartArtを図形に変換してグループ解除するPowerPointマクロ