min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

ChatGPT「巨大なパワポの中にある画像をキュッっと小さくしてサイズを大幅に縮小するVBAマクロのコードを示して」

ハピタス登録で1,000円分になるURL

その買うを、もっとハッピーに。|ハピタス

 

パワポの画像だけ縮小VBAマクロ 

こうなる

超便利。

 

何ができるか

こんなパワポがあったとして

100ページくらいあるスライド全ての画像サイズを半分にしたいとする。

 

まずは左上「ファイル」→「その他」→「オプション」から

リボンのユーザー設定→メインタブ→開発 にチェック→OK

Visual Basicをクリックして…

VBAProjectを右クリック→挿入→標準モジュール

ソースコード(この記事の末尾にあり)をペタっと貼り付けて

保存。

 

あとは、マクロ→実行すると…

画像がキュッっと小さくなる!

最高。

 

驚愕のChatGPT

このソースができるまでのChatGPTとのやりとり

エラーが出たよと教えて改善を促す

治しよる。

 

しかし更にエラーが出たぜと伝える

改善してきよった。

 

なおもエラーが出る。3度目の正直なるか。

動いた!

しかし、縮小前の元画像も残って重なっちゃった。これじゃサイズは小さくならない。

元画像を削除する考慮が漏れている?または無限ループしている?

さらに改善を促す。

スゴイ。ほぼ治った。あとはちょっと手修正を加えた。以下ソースコード

 

ソースコード
Sub ReduceImageResolution7()

    Dim slide As slide
    Dim shape As shape
    Dim pic As ShapeRange

    ' 解像度を下げる倍率
    Dim reductionFactor As Double
    reductionFactor = 0.5 ' 50%に減らす例

    For Each slide In ActivePresentation.Slides
        For Each shape In slide.Shapes
            If shape.Type = msoPicture Then
                Set pic = slide.Shapes.Range(Array(shape.Name))
                pic.Export Environ("TEMP") & "\temp.jpg", ppSaveAsJPG
                Set pic = Nothing

                ' もとの形状のサイズと位置を変数に保存する
                Dim oldLeft As Single
                Dim oldTop As Single
                Dim oldWidth As Single
                Dim oldHeight As Single
                oldLeft = shape.Left
                oldTop = shape.Top
                oldWidth = shape.Width
                oldHeight = shape.Height
                

                ' 新しい形状を追加する
                Set shape2 = slide.Shapes.AddPicture(Environ("TEMP") & "\temp.jpg", msoFalse, msoTrue, oldLeft, oldTop, oldWidth, oldHeight)
                'shape.Select
                With shape2
                    .ScaleWidth reductionFactor, msoFalse, msoScaleFromTopLeft
                    .ScaleHeight reductionFactor, msoFalse, msoScaleFromTopLeft
                End With
                
                ' もとの形状を削除する
                shape.Delete
                
                Kill Environ("TEMP") & "\temp.jpg"
            End If
        Next shape
    Next slide

End Sub

 

 

 

 

 

その買うを、もっとハッピーに。|ハピタス