三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

パワポ 書式をコピー後、別ページの同じ位置のシェイプに適応したい Shape PickUpメソッド Applyメソッド PowerPointVBA デバッグ

パワーポイントのシェイプの書式をコピーしたかったので

Shape.PickUp メソッド

Shape.Apply メソッド
を使ってみました。
youtu.be
https://youtu.be/YHv3oVOS6BQ
目次
00:00 動作・実行結果 テスト実演
01:34 1.単体テスト PickUp Apply
06:30 2.選択シェイプの判断 Selection.ShapeRange を使用
09:52 3.結合テスト 他のページ、同じ位置のシェイプに書式を適応させる
14:45 他のpptxファイルで再テスト

#PowerPointVBA #コピペ #デバッグ

Shape.PickUp メソッド (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.shape.pickup
図形の書式をコピーします。 コピーした書式を別の図形に適用するには、 Apply メソッドを使用します。

Shape.Apply メソッド (PowerPoint)
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.shape.apply
PickUp メソッドを使用してコピーされて、指定した図形の書式設定に適用されます。

知恵袋の質問、
detail.chiebukuro.yahoo.co.jp

>Power Point VBA
>パワーポイントの複数のスライドにて
>指定の位置にあるテキストのみの書式を一括変更する方法はありますでしょうか?
>書体、サイズ、太さを一括で変更したいです。

にチャレンジ、、、


1.単体テスト PickUp Apply 01:34 ~

テキストの中身は変更しないで、書式だけコピーする

テストで、
入力:Slides(1).Shapes("テキスト ボックス 3")を.PickUp

出力:名前固定でSlides2,3,4のShapes("テキスト ボックス 1") に .Apply
してみた。

Sub test0608書式コピーテスト001単体テスト()

    Dim ppShpMOTO As PowerPoint.Shape  'なんでも元、基準が必要だよね
    
    'テストコードなので、Slides(1)ページ目の"テキスト ボックス 3"を使用する
    Set ppShpMOTO = ActivePresentation.Slides(1).Shapes("テキスト ボックス 3")
    '↑スペースが含まれている名前が気になるけど、テストだからイッカ
    '自分でテスト、走らせるときに、注意してね
    
    '脱線したけど、単純に、.PickUp で 書式コピー
    ppShpMOTO.PickUp
    'ShapeからPickUp動作 ↑ピックアップ、選び取る?イメージだけど、書式のコピー

    'あとは、貼り付けるだけ Apply アプライ?英単語で調べると申し込み?アプラスとアコムは金貸しです。
    'スライドページ、2,3,4 の "テキスト ボックス 1"に
    '.Apply を指定して、適用(貼り付ける・・・)
    ActivePresentation.Slides(2).Shapes("テキスト ボックス 1").Apply
    ActivePresentation.Slides(3).Shapes("テキスト ボックス 1").Apply
    ActivePresentation.Slides(4).Shapes("テキスト ボックス 1").Apply

End Sub

2.選択シェイプの判断 Selection.ShapeRange を使用 06:30 ~

ActiveWindow.Selection.ShapeRange(1)

選択されたシェイプなので、これを利用する。

テストで、
入力:選択されたシェイプを.PickUp

出力:名前固定でShapes("テキスト ボックス 2") に .Apply
してみた。

'あとは、応用で、選択されたShapeの書式をコピーする
Sub test0608書式コピーテスト002選択されたShapeの書式()

    If ActiveWindow.Selection.Type <> ppSelectionShapes Then  '種類の判断
        MsgBox "Shape図形やテキストボックスを選択してね", vbExclamation
        Exit Sub
    End If
    
    Dim ppShpMOTO As PowerPoint.Shape  'なんでも元、基準が必要だよね
    Set ppShpMOTO = ActiveWindow.Selection.ShapeRange(1)
    '↑選択された1件目のシェイプオブジェクトを代入
    
    '単純に、.PickUp で 書式コピー、ふと↑で、ShapeRange(1).PickUp?で良くない?と思ったり
    ppShpMOTO.PickUp
    'ShapeからPickUp動作 ↑ピックアップ、選び取る?イメージだけど、書式のコピー

    'あとは、貼り付けるだけ Apply アプライ?英単語で調べると申し込み?
    'スライドページ、2,3,4 の "テキスト ボックス 2"に
    '.Apply を指定して、適用(貼り付ける・・・)
    ActivePresentation.Slides(2).Shapes("テキスト ボックス 2").Apply
    ActivePresentation.Slides(3).Shapes("テキスト ボックス 2").Apply
    ActivePresentation.Slides(4).Shapes("テキスト ボックス 2").Apply

    MsgBox "終了、結果を確認してください"

End Sub

3.結合テスト 他のページ、同じ位置のシェイプに書式を適応させる 09:52 ~

テストで、
入力:選択されたシェイプを.PickUp

出力:.Leftと.Topが同じShapeに.Apply
してみた。

'同じ位置のシェイプの書式を合わせたい・・・
'選択されたシェイプの書式をコピーする
'各ページの 左上の座標 .Top , .Left が同じシェイプに貼り付ける
Sub test0608書式コピーテスト003同じ位置のシェイプ書式を合わせる()

    If ActiveWindow.Selection.Type <> ppSelectionShapes Then  '種類の判断
        MsgBox "Shape図形やテキストボックスを選択してね", vbExclamation
        Exit Sub
    End If
    
    Dim ppShpMOTO As PowerPoint.Shape  'なんでも元、基準が必要だよね
    Set ppShpMOTO = ActiveWindow.Selection.ShapeRange(1)
    '↑選択された1件目のシェイプオブジェクトを代入
    
    '単純に、.PickUp で 書式コピー、ふと↑で、ShapeRange(1).PickUp?で良くない?と思ったり
    ppShpMOTO.PickUp
    'ShapeからPickUp動作 ↑ピックアップ、選び取る?イメージだけど、書式のコピー

    'あとは、貼り付けるだけ Apply アプライ?英単語で調べると申し込み?
    'スライドの頭からループで回す
    Dim ppSlide As PowerPoint.Slide  'スライドのオブジェクト
    Dim ppShp   As PowerPoint.Shape  'シェイプのオブジェクト
    
    For Each ppSlide In ActivePresentation.Slides  '全スライドのループ
        For Each ppShp In ppSlide.Shapes  'スライド内の全シェイプのループ
            '左上の位置が同じなら処理する
            If ppShp.Top = ppShpMOTO.Top And ppShp.Left = ppShpMOTO.Left Then
                ppShp.Apply  '書式を貼り付ける
            End If
        Next
    Next
    '↑全てのシェイプをループで漁るので、ppShpMOTOの同じシェイプに貼り付けるけどOKかな。
    
    MsgBox "終了、結果を確認してください"

End Sub

4.終わりの挨拶

時間泥棒になってしまいますが、
動画の頭から
https://www.youtube.com/watch?v=YHv3oVOS6BQ
見ていただけると、嬉しいです。
目次
00:00 動作・実行結果 テスト実演
01:34 1.単体テスト PickUp Apply
06:30 2.選択シェイプの判断 Selection.ShapeRange を使用
09:52 3.結合テスト 他のページ、同じ位置のシェイプに書式を適応させる
14:45 他のpptxファイルで再テスト

Shapeの
PickUpメソッド

Applyメソッド
で、
書式のコピペができるので、
アレンジして使ってみてください。

解決のヒントとなれば幸いです。



イラスト 男性 髪の色はオレンジ PCを操作中 大量の文字を修正作業中

イラスト グラフィックデザイナー 女性 髪の色はオレンジ PCを操作中 大量の文字を修正作業中

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)