- ベストアンサー
PowerPointのVBAで図形の縮小後に画質を落とさずに出力する方法
- PowerPointのVBAを使用して、スライド上の図形を縮小し、画質を落とさずにjpg画像として保存する方法を教えてください。
- 現在、図形縮小後に.ShapeRange.Exportを使用して画像出力していますが、画質が荒くなってしまいます。
- スライド全体を保存せずに、図形のみをjpg画像として保存する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 > PP単体では難しいようでしたら、他の方法に変えたいと思います。 そうアッサリと引き下がらないで頑張ってみましょうよ(;´・ω・`)σ 「専用ソフトではなく、あえて Office ツールでやってみる」という精神は 結構好きです。JPEG 書き出しのサンプルを書いてみました。 ▼手順 1. 明熊氏作成の [明熊JPEG保存DLL](フリー) をダウンロード http://www.vector.co.jp/soft/win95/prog/se093621.html 2. 1. でダウンロードした圧縮ファイルを解凍し、SaveJPG.DLL を Windows フォルダ内の System32 フォルダへコピー これで OK です。 PP には CopyPicture メソッドがなかったので、一度ビットマップで書き出し てから、それを Jpeg 変換しています。Excel ならこの手間が必要ありません。 CopyPicture でクリップボード経由でできますので。詳しくは、SaveJPG.DLL 添付のドキュメントをお読み下さい。 エラー処理とか、Jpeg のファイル名とか画像の挿入部分は省略しました。 付け足してご自分のツールとして完成させていただければ、幸いです。 基本的なメソッドしか使ってませんので、ちょこちょこ書き換えれば Excel や Word でも動ごくと思います( ・∀・) それにしても PP が書き出す JPEG はいけてないですね...では。 Option Explicit ' SaveJPG.DLL を Windows\System32 フォルダ内に置いて下さい Declare Function SavetoJPEG Lib "SaveJPG.DLL" ( _ ByVal bmpf As String, _ ByVal jpgf As String, _ ByVal Value As Byte, _ ByVal Prgrs As Boolean) As Integer ' PP ファイル内の写真を全てスライド上のサイズで JPEG 書き出し Sub OutputJpegFile() Dim Sld As Slide Dim Shp As Shape Dim strDirPath As String Dim strTmpname As String Dim strJpgname As String Dim lngCounter As Long ' SaveJPG.DLL 設定------------------------------------------ Const QUARITY = 100 ' 画質 1-100 Const PROGRESSIVE = False ' プログレッシブ True/False '----------------------------------------------------------- ' 現在アクティブな PP ファイルのディレクトリ取得 strDirPath = ActivePresentation.Path For Each Sld In ActivePresentation.Slides For Each Shp In Sld.Shapes ' Shape Object は写真か? If UCase$(Shp.Name) Like "PICTURE*" Then ' 一時ファイル名のビットマップで書き出す strTmpname = GetTmpFilename(strDirPath) Shp.Export strTmpname, ppShapeFormatBMP ' ビットマップが書き出されるまで待機 While CBool(Dir$(strTmpname) = "") DoEvents Wend ' Jpeg ファイル名生成 strJpgname = strDirPath & "\Picture" _ & Format$(lngCounter, "000") & ".jpg" ' ビットマップを SaveJPG.DLL で Jpeg 変換 Call SavetoJPEG(strTmpname, _ strJpgname, _ QUARITY, _ PROGRESSIVE) ' 一時ファイルを削除 Kill strTmpname ' カウントアップ lngCounter = lngCounter + 1 End If Next Shp Next Sld End Sub ' 指定フォルダ内で重複しない一時ファイル名を生成する関数 Private Function GetTmpFilename(ByRef strDirPath As String) As String With CreateObject("Scripting.FileSystemObject") Do GetTmpFilename = .BuildPath(strDirPath, .GetTempName) Loop Until GetTmpFilename <> "" End With End Function
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
単に縮小(または拡大)画像を書き出したいだけなら、PowerPoint(PP)を 使う理由がわかりません。専用ソフトを使った方が綺麗に早く処理できる からです。 是非とも PP でこの処理を行うご事情があるのであれば、その理由を具体 的に補足して下さい。 これを伺うのは、意図を理解しないで回答したがために発生する余計な 回答を省くのが目的です。PP 単体では恐らく難しいです。外部コンポー ネント(DLL)を使って Jpg を書き出す方法か別アプリを経由する方法 などを想定しています。
お礼
画像をペイント開きサイズを縮小し、保存ファイル名に更新日をつけて保存するというのを手で行なっています。この処理を自動化するためにプログラム作成を考えました。 そこで、私はVBAの知識が少しあるのでマクロの記録を流用して簡単にプログラムができるのではないかと思ったため、マクロを使用しようと思いました。 PP単体では難しいようでしたら、他の方法に変えたいと思います。 ご回答ありがとうございました。
お礼
さっそく、教えていただいた方法でためしてみました。 Excelでもやってみました。 私のやりたいことが出来ました!!(^^) 本当に感謝です! わかりやく丁寧な説明をありがとうございました。