三流君 ken3のmemo置き場

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

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

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

XXXXXさんへ PowerPointのノート読み上げと同時に字幕っぽくテキスト文字を表示 自動ナレーションと字幕もどき

>パワーポイントノートに記入した内容をナレーション字幕にしたい

と要望をいただいたので、
マクロで作成・チャレンジしてみました。

やりたいこと イメージ図

と言っても、前回作成( 2022/09/07 )のマクロ
マクロ パワーポイントでノートを読み上げ PowerPoint VBA SAPI.SpVoice Speak デバッグ マクロ作り方・使い方
https://www.youtube.com/watch?v=mLUdzmReyCU

(↑音読処理 CreateObject("SAPI.SpVoice")で処理した 元になった上記動画もヨロシク)

ノートを行単位
改行コード vbCR で区切って、
SAPI.SpVoiceで読み上げと用意したテキストボックスに代入しただけです。

動画で設置方法や仕組みを解説しました。コードと合わせてみてください。
youtu.be
https://youtu.be/uXi1QJyPbTU
目次
00:00 作成結果を先に見せる
00:41 1.表示場所 テキスト字幕エリアを設置します
01:58 2.アイコンなど、マクロの起動ボタンを設置します
04:47 字幕のフォント変更など微調整する方法
06:56 3.マクロ VBA コードの説明を軽く
12:00 4.あっ、マクロの設置方法を忘れてた・・・
17:39 5.おわりの挨拶 アレンジ方法

#PowerPoint #パワーポイント #ナレーション
#パワポ #ノート #読み上げ #字幕
#VBA #PowerPointVBA #マクロ
#作成方法 #設置手順

0.作成結果を先に見せる
動画の冒頭でサヨナラが多いので、
先に結果を見せて、10秒でもひっぱる。
なんて、私の願望、心の話は置いといて

1.字幕を表示させたい場所にテキストボックスを設置します

テキストボックスを設置して、
名前を テキスト字幕エリア とします。
1.1 挿入 テキストボックスで追加して、枠を作ってから
1.2 配置 オブジェクトの選択と表示 から
  名称を テキスト字幕エリア とします

図 オブジェクトに名前を付ける

2.アイコンなど、マクロの起動ボタンを設置します

作成した読み上げマクロを起動したいので、
2.1 起動用のアイコンなどを設置します。
2.2 設置後、挿入 動作 から マクロを登録します。

図 動作 マクロの登録

3.コードの説明を軽く

仕組みは単純で 表示中のスライドからノート文字列を取得後
Split 関数 で 行単位に分けて
1行単位でループして、
字幕エリアに文字列のセット と 読み上げ を 繰り返しただけです。

'取得したノートを改行 CR で区切る
    Dim txtLINE As Variant  'Splitの結果を受け取りたいのでVariant
    txtLINE = Split(strNOTE, vbCr) '単純にSplitでCR区切りの配列を作成

改行で分解して、表示と音読をセットでループしただけでした。

    '単純にSAPI.SpVoiceを使用してみた
    Dim objSAPI As Object
    Set objSAPI = CreateObject("SAPI.SpVoice")
    
    For n = 0 To UBound(txtLINE)  '単純に配列数分 文字列セットと読み上げを繰り返す
        Debug.Print n, txtLINE(n)
        objTextShp.TextFrame2.TextRange.Text = txtLINE(n) '字幕のセット
        DoEvents
        objSAPI.Speak txtLINE(n)   '.Speakに文字列を渡し読み上げる
        DoEvents
    Next

4.あっ、マクロのコピー方法を説明してなかった・・

いきなり、説明始めたけど、
設置方法のマクロのコピペを忘れていた

下記のコードをコピー後、
貼り付けたいパワポを開き、
Alt+F11 で マクロ編集画面を起動して、
挿入 標準モジュールで枠を作成してから、
貼り付けます。

その後、テキストボックスやアイコンを追加して、テストします。

保存するときは、マクロ有効のファイル形式で保存します。

なんて、言っても・・???ですよね。

初めから、やってみますね。
※動画 12:00~
https://www.youtube.com/watch?v=uXi1QJyPbTU&t=720s
↑設置方法を見てください。

'下記のコードをコピー
'Win10 MS365のPowerPointでテスト
Sub 現在スライドノート読み上げとテキストセット()
    
    Dim strNOTE As String   '読み上げたいノートの文字列

    'コードが長いけど、現在のスライドノートを取得
    '...Placeholders(2)なんで2?これで取得できるので・・・
    strNOTE = SlideShowWindows(1).View.Slide.NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text
    Debug.Print "ノート:" & strNOTE

    'ノートが空白なら終了
    If strNOTE = "" Then
        MsgBox "ノートが見つかりません"
        Exit Sub  'メッセージ
    End If

    '↑上で取得したノートを改行 CR で区切る
    Dim txtLINE As Variant  'Splitの結果を受け取りたいのでVariant
    txtLINE = Split(strNOTE, vbCr) '単純にSplitでCR区切りの配列を作成

    '字幕を表示するテキストボックスを存在チェックを兼ねて事前代入
    Dim objTextShp As Shape   '字幕の表示エリアを入れる
    Set objTextShp = Nothing  'チェックを兼ねて初期化
    On Error Resume Next  'エラーが発生しても強引に次の命令に行け
    '"テキスト字幕エリア" って固定名のテキストボックスを代入する
    Set objTextShp = SlideShowWindows(1).View.Slide.Shapes("テキスト字幕エリア")
    On Error GoTo 0  'ここから先は、いつものエラー処理に忘れないで戻すぞ
    If objTextShp Is Nothing Then 'Nothing=テキストボックスが用意されていない時は
        MsgBox "テキスト字幕エリア の名称で表示場所のTextBoxを用意してください"
        Exit Sub  'メッセージ
    End If
    
    'やっとノート読み上げ と 字幕をセット
    Dim n As Integer 'ラインのカウンター

    '単純にSAPI.SpVoiceを使用してみた
    Dim objSAPI As Object
    Set objSAPI = CreateObject("SAPI.SpVoice")
    
    For n = 0 To UBound(txtLINE)  '単純に配列数分 文字列セットと読み上げを繰り返す
        Debug.Print n, txtLINE(n)
        objTextShp.TextFrame2.TextRange.Text = txtLINE(n) '字幕のセット
        DoEvents
        objSAPI.Speak txtLINE(n)   '.Speakに文字列を渡し読み上げる
        DoEvents
    Next
    objTextShp.TextFrame2.TextRange.Text = "字幕の表示エリア" 'ループを抜けたら、クリアしとく
    
    Set objSAPI = Nothing

End Sub
'ここまで

5.おわりの挨拶

こんな感じで、パワポのノートを読み上げることができるので、
アレンジして使ってみてください。
※文章を読み上げるだけのプレゼンはプレゼントは言わない・・
 と言われるので、アクセントとして使ってみてください。

18:26 ~
https://youtu.be/uXi1QJyPbTU?t=1106
の、アレンジ方法↑↑↑が、スライド・プレゼンのヒントとなれば幸いです。

何かの参考になれば、うれしいです。


音読、読み上げの関連記事:
ken3memo.hatenablog.com
ken3memo.hatenablog.com
ken3memo.hatenablog.com

Ken3 ホームページ 目次

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

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



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