知恵袋の質問
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
指定したオブジェクトの名前を設定または返します。 読み取りまたは書き込み 文字列 です。