Home » パワーポイントマクロ・PowerPoint VBAの使い方 » 画像 » VBAで図として保存する

VBAで図として保存する

対象:PowerPoint 2010, PowerPoint 2013, Windows版PowerPoint 2016

「ppt vba 図として保存」
「パワーポイント vba 図として保存」
といった検索キーワードでのアクセスが、時折あることに気づきました。

PowerPointの場合、スライド上の画像等を右クリックすると表示されるショートカットメニューに、

図として保存

上図のような[図として保存]コマンドが存在しています。

PowerPoint VBAからこの[図として保存]を実行するには、どのようなコードを書けばいいのかを探していらしたのでしょう。

[スポンサードリンク]

図として保存を実行するPowerPoint VBAのサンプルコード

以下のコードを実行すると、アクティブなプレゼンテーションの1枚目のスライドの、1つ目のShapeが、「c:\tmp\」フォルダーに「SAMP.png」として保存されます。
 ActivePresentation.Slides(1).Shapes(1).Export _
   PathName:="c:\tmp\SAMP.png", _
   Filter:=ppShapeFormatPNG
以下のコードを実行すると、選択されている画像が、「c:\tmp\」フォルダーに「SAMP.png」として保存されます。
 ActiveWindow.Selection.ShapeRange.Export _
   PathName:="c:\tmp\SAMP.png", _
   Filter:=ppShapeFormatPNG

Shape.Export・ShapeRange.Exportで図として保存できる

「ActivePresentation.Slides(1).Shapes(1)」「ActiveWindow.Selection.ShapeRange」は、PowerPoint VBAで頻出するオブジェクトを取得するコード(オブジェクト式)です。

これらのオブジェクト式で取得できる、ShapeオブジェクトやShapeRangeオブジェクトのExportメソッドで、

Shape.Exportメソッド

図として保存ができます。

このShape.Export・ShapeRange.Exportメソッドは、なぜかオブジェクトブラウザーでは非表示となっています。

オブジェクトブラウザーで右クリックして表示されるショートカットメニューで、[非表示のメンバーを表示]をOnにしてやれば、下図のとおりコーディング時にもメンバー表示されます。

Shape.Exportの自動メンバー表示

引数PathNameには保存するパスを文字列で、FilterにはPpShapeFormat列挙に定義されている定数を、

PpShapeFormat

それぞれ指定します。

非表示のメンバーを表示する設定になっていれば、引数Filterも下図のようにコーディング時にメンバー表示されます。

引数Filterの自動メンバー表示

Slide.Export・SlideRange.Exportとは引数が違うので要注意

ところでPowerPoint VBAでは、Slide.ExportメソッドやSlideRange.Exportメソッドで、(スライド内の画像ではなく)スライド自体を画像として保存することができます。

Slide.Exportメソッド

Shape.Export・ShapeRange.Exportとメソッド名も同じで、行われる処理もよく似ていますが、(いやらしいことに)引数が違うので注意が必要です。

以下のコードを実行するとアクティブなプレゼンテーションの1枚目のスライドが、「c:\tmp\」フォルダーに「SAMP.png」として保存されます。
 ActivePresentation.Slides(1).Export _
   FileName:="c:\tmp\SAMP.png", _
   FilterName:="png"

この記事でご紹介した、アクティブなプレゼンテーションの1枚目のスライドの、1つ目のShapeを図として保存するコードと、似て見えます。
 ActivePresentation.Slides(1).Shapes(1).Export _
   PathName:="c:\tmp\SAMP.png", _
   Filter:=ppShapeFormatPNG

階層の深さは違いますが、いずれもExportメソッドで、保存するパスやファイル種別を引数で指定している点が似ています。
しかし、実は違いがあるので注意が必要です。

引数の名前が違う

引数名がまず違います。

指定している意味としては似ているのに、
SlideオブジェクトのExportメソッドでは、FileNameとFilterName
 ActivePresentation.Slides(1).Export _
   FileName:="c:\tmp\SAMP.png", _
   FilterName:="png"

ShapeオブジェクトのExportメソッドでは、PathNameとFilterです。
 ActivePresentation.Slides(1).Shapes(1).Export _
   PathName:="c:\tmp\SAMP.png", _
   Filter:=ppShapeFormatPNG

画像種別に指定する型が違う

また画像の種類を指定する引数に指定するデータ型も違います。

SlideオブジェクトのExportメソッドの引数FilterNameでは文字列で指定するのに対し、
 ActivePresentation.Slides(1).Export _
   FileName:="c:\tmp\SAMP.png", _
   FilterName:="png"

ShapeオブジェクトのExportメソッドの引数Filterでは定数を指定します。
 ActivePresentation.Slides(1).Shapes(1).Export _
   PathName:="c:\tmp\SAMP.png", _
   Filter:=ppShapeFormatPNG

引数名のほうは、名前付き引数を使わなくても、それほど可読性は落ちないので標準引数にすれば一応済む話ですが、第2引数に指定する型が違うのは厄介です。

何故こんなことになっているのか、非常に不可解です。

そもそもPowerPoint上のコマンドとして現存しているコマンドに該当する、Shape.ExportメソッドやShapeRange.Exportメソッドが非表示となっている理由も謎です。

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » 画像 » VBAで図として保存する

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

.