三流君 ken3のmemo置き場

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

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

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

パワポ マクロ 全てのスライドのフォントを一括変更 使い捨てマクロ設置のお話

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

既存のパワーポイントファイルのすべてのスライドのフォントを一気に変更することは出来ないのでしょうか?


あったので
マクロを作成し、使い捨てのマクロ処理を設置してみた

#パワーポイント #PowerPointVBA #マクロ #フォント #一括変更 #マクロ設置方法 #デバッグ

下記、できたと思って解説してるが、
途中で不具合・バグをみつけて気落ちする・テンション下がるオッサンの解説です※説明長いよ・・・
youtu.be
https://youtu.be/2EOq7Byl3BY
目次
00:00 0.やりたいこと、コードの説明をかるく
00:50 1.実際にテストする
01:15 VBAコードの説明 デバッグ
04:01 2.エラーのテスト
05:01 3.設置方法
09:24 テスト中に不具合・バグを発見する
11:02 マクロなし保存時のメッセージについて
13:52 再度 設置方法含め説明と言い訳を繰り返す

0.コードの説明をかるく?
と言っても
objShape.TextFrame.TextRange.Font.Name = strFontName
objShape.TextFrame.TextRange.Font.NameFarEast = strFontName
みたいに、
シェイプにフォントの名前をセットしただけだった・・・ハマったけどね(笑)

1.実際にテストする
メイリオ
HGP創英角ポップ体
HGS明朝B
HGS明朝E
HG丸ゴシックM-PRO

など、↑をテストで使ってみた・・・

2.エラーのテスト
おっと、エラーテストしなきゃな。
漫画文字
おっさんフォント
とか無いフォント名を入力すると・・・

えっ、なんでエラーが発生しないんだよ・・・
※これは、別な意味でマズいかなぁ・・・

3.設置方法

設置方法で、よく、私も伝えるのが
標準モジュールにコードを貼り付けて
テストしてみてください。

'使い捨てのマクロ
'パワーポイントのスライド内のフォントを変更する
Sub test20220926pp使い捨てフォントを一括変換()
    
    Dim p As Integer
    Dim strFontName As String  '変更するフォントの名前
    Dim objShape As PowerPoint.Shape 'パワポのシェイプ、テキスト、図形ほか

    '頭でフォントの名前を入れる、使い捨てなのにね・・
    strFontName = InputBox("変更したいフォント名を入力", "入力", "メイリオ")
    If strFontName = "" Then Exit Sub  '↑でキャンセルなら抜ける
    
    For p = 1 To ActivePresentation.Slides.Count  'スライド数ループ pページ
        'pページのスライド内のシェイプを探る
        For Each objShape In ActivePresentation.Slides(p).Shapes
            'オブジェクトがテキストを持っているか?チェックしてからセット
            If objShape.HasTextFrame = msoTrue Then 'テキストフレームあり
                If objShape.TextFrame.HasText = msoTrue Then 'テキスト範囲あり
                    'ここまで、チェックしたら、フォントの名前変更(フォント変更)
                    objShape.TextFrame.TextRange.Font.Name = strFontName 'こっちが正解?
                    objShape.TextFrame.TextRange.Font.NameFarEast = strFontName 'フォント名変更
                    objShape.TextFrame.TextRange.Font.NameAscii = strFontName '英字AZ 20221002追加 ※1
                    objShape.TextFrame.TextRange.Font.NameOther = strFontName 'その他もついでに 20221002追加 ※2
                End If
            End If
        Next
    Next
    
    MsgBox "処理終了、フォントを確認して保存してくださいね"

End Sub

こんな感じで、使い捨てのマクロを設置、実行してみました。

処理など、何かの参考となれば幸いです。


解決のコメントいただいてました。※なんか、URL付きだと非表示・確認コメントになってました
PowerPointのFontをすべて変更するVBA (グループ化されていても!) - Qiita
https://qiita.com/Umaremin/items/7270a65b72debb17bba2
qiita.com
↑で、解決されたみたいでよかったです。
私も勉強になりました。



ググってた時に見つけた
youtu.be
パワーポイント基本操作第19回 一撃必殺!すべてのスライドのフォントを一気に変換する方法!!!
https://youtu.be/uFoNgPS6v2I?t=293
↑が便利でした。ぉぃぉぃ。
もしかして、これでいいのか?やってみてください。



2022/10/02 追記

報告コメントありがとう、
マクロを走らせて、一部・変更されないと、安心して使えないですよね。
ってことで探ってみたら・・・重要な抜けに気が付く(コメント無かったら気が付かなかったので、ありがとう)
前置き長いよ、、、
途中 09:27で少し異変に気が付いているのに、適当に変えて動いたから深く調べなかった、

原因は、私の確認不足かなぁ(ぉぃぉぃ)
設定できるフォントが四種類あって

設定可能なフォント名のプロパティ

: Name : "游ゴシック" : String : Module1.aaaa
: NameAscii : "游ゴシック" : String : Module1.aaaa
: NameFarEast : "游ゴシック" : String : Module1.aaaa
: NameOther : "游ゴシック" : String : Module1.aaaa

'ここまで、チェックしたら、フォントの名前変更(フォント変更)
objShape.TextFrame.TextRange.Font.Name = strFontName 'こっちが正解?
objShape.TextFrame.TextRange.Font.NameFarEast = strFontName 'フォント名変更
↑私が作成したコードだと、2種類変更しただけでした。
※こっちが正解?・・とか迷ってたけど、
 一番やらなきゃならない英字 A~Zなどのフォント
NameAsciiを変えてなかったみたいです。

コードの
'ここまで、チェックしたら、フォントの名前変更(フォント変更)
objShape.TextFrame.TextRange.Font.Name = strFontName 'こっちが正解?
objShape.TextFrame.TextRange.Font.NameFarEast = strFontName 'フォント名変更

上記コード↑を

'ここまで、チェックしたら、フォントの名前変更(フォント変更)
objShape.TextFrame.TextRange.Font.Name = strFontName 'こっちが正解?
objShape.TextFrame.TextRange.Font.NameFarEast = strFontName 'フォント名変更
objShape.TextFrame.TextRange.Font.NameAscii = strFontName '英字AZ 20221002追加 ※1
objShape.TextFrame.TextRange.Font.NameOther = strFontName 'その他もついでに 20221002追加 ※2

↑と2行追加 ※1,※2 してみてください、
これでマクロから設定できる四種類、同時に変更されると思います



ここからしたは、メモ的に残しておくので、読み飛ばしてください。
無事に残りの一部が変更され、
安心して使えるようになるといいなぁ・・と思いつつ失礼します。

          • ここにきた プログラマーさん達へ(そんなひといるのか?) メモ -----------

Font.NameOther プロパティ (Word)
https://learn.microsoft.com/ja-jp/office/vba/api/word.font.nameother

文字コードが 128 255 までからの文字に使用するフォントを設定または返します。
読み取りまたは書き込み 文字列 です。

文字コードが 128 255って?
https://www.kanaya440.com/contents/script/vbs/others/ascii2.html
↑を見ると、ラテン文字など?

ちがう、こっちですね
Font.NameAscii プロパティ (Word)
https://learn.microsoft.com/ja-jp/office/vba/api/word.font.nameascii

英数字 (文字コードが 0 (ゼロ) ~ 127) に使用するフォントを設定または返します。 読み取りまたは書き込み 文字列 です。


普通のAscii文字のフォントでした。
なぜ、これを変更しなかったのだろう・・・

Font.NameFarEast プロパティ (Word)
https://learn.microsoft.com/ja-jp/office/vba/api/word.font.namefareast

東アジアのフォント名を設定または返します。 読み取りまたは書き込み 文字列 です。

※↑なんで、こっちをセットしてたんだろう・・・?

最後は、ノーマルの.Name
Font.Name プロパティ (Word)
https://learn.microsoft.com/ja-jp/office/vba/api/word.font.name

指定したオブジェクトの名前を設定または返します。 読み取りまたは書き込み 文字列 です。

Ken3 ホームページ 目次

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

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



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