「ppt vba 図として保存」
「パワーポイント vba 図として保存」
といった検索キーワードでのアクセスが、時折あることに気づきました。
PowerPointの場合、スライド上の画像等を右クリックすると表示されるショートカットメニューに、
上図のような[図として保存]コマンドが存在しています。
PowerPoint VBAからこの[図として保存]を実行するには、どのようなコードを書けばいいのかを探していらしたのでしょう。
図として保存を実行するPowerPoint VBAのサンプルコード
以下のコードを実行すると、アクティブなプレゼンテーションの1枚目のスライドの、1つ目のShapeが、「c:\tmp\」フォルダーに「SAMP.png」として保存されます。PathName:="c:\tmp\SAMP.png", _
Filter:=ppShapeFormatPNG
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・ShapeRange.Exportメソッドは、なぜかオブジェクトブラウザーでは非表示となっています。
オブジェクトブラウザーで右クリックして表示されるショートカットメニューで、[非表示のメンバーを表示]をOnにしてやれば、下図のとおりコーディング時にもメンバー表示されます。
引数PathNameには保存するパスを文字列で、FilterにはPpShapeFormat列挙に定義されている定数を、
それぞれ指定します。
非表示のメンバーを表示する設定になっていれば、引数Filterも下図のようにコーディング時にメンバー表示されます。
Slide.Export・SlideRange.Exportとは引数が違うので要注意
ところでPowerPoint VBAでは、Slide.ExportメソッドやSlideRange.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メソッドが非表示となっている理由も謎です。
- Newer:『入門! Exce VBAクイックリファレンス』在庫確認用リンク
- Older:Ovalsを削除する
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » 画像 » VBAで図として保存する