質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

6432閲覧

PowerPoint VBA 設定済のアニメを任意のタイミングで動作させたい

ohikazuma

総合スコア17

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/02/27 10:09

編集2021/02/28 05:49

パワーポイントのVBAを使って音声読み上げ機能は出来ました。
そして、同一スライドで、音声を読み上げた後にアニメーションを動かし、次の音声後に次のアニメーションを動かしたいと、思ってNetを調べたのですが…
アニメーションのプロパティの設定方法は見つかるのですが、実際にアニメを一づつ動作させるような方法が見つかりませんでした。
漠然とした質問で申し訳ありませんが、何方かご存知の方はいらっしゃらないでしょうか。
ヒントでもかまいません。

[参考プログラム]

VBA

1 2Public Sub CommandButton実行_Click() 3 4 Call 音声読み上げ("これから現状分析します") 5 6 Sleep 500 7 Call 音声読み上げ("これが既存の状態です。") 8 9  ’ここで図形表示したい!!! 10 11 Sleep 2000 12 Call 音声読み上げ("最大の問題はこれです。") 13 14  ’ここで図形表示したい!!! 15 16 'ノート欄の文字列を取得する場合はこちら 17 Dim strNote As String 18 strNote = NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text 19 20 Call 音声読み上げ(strNote) 21 22End Sub 23 24Public Sub 音声読み上げ(strNote As String) 25 26 '' ノート欄が空の場合は,読み上げ処理を行わずに終了 27 If strNote = "" Then 28 Exit Sub 29 End If 30 31 '' 音声合成エンジンを取得 32 Dim sv As Object 33 Set sv = CreateObject("SAPI.SpVoice") 34 35 '' インストールされている音声合成エンジンのうち、最初に見つかった日本語のものを選択 36 For i = 0 To sv.GetVoices.Count - 1 37 If InStr(sv.GetVoices.Item(i).GetDescription, "Japanese") Then 38 Set sv.Voice = sv.GetVoices.Item(i) 39 Exit For 40 End If 41 Next 42 '' 日本語のエンジンが見つからなかった場合 43 If InStr(sv.Voice.GetDescription, "Japanese") < 1 Then 44 '' 発見に失敗した旨をメッセージボックスで通知 45 MsgBox "日本語のエンジンが見つかりませんでした。" & vbCrLf & _ 46 "現在の設定 : " & sv.Voice.GetDescription 47 Exit Sub 48 End If 49 50 '' 音声合成実行 51 sv.Speak strNote 52 53 '' 音声合成エンジンを開放 54 Set sv = Nothing 55 56End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinoji

2021/02/28 01:36

読み上げ機能のVBAというのをどんなふうにしているかにもよりますが、 (差し支えなければコードを掲載していただければ参考になります) 単にアニメーションの詳細設定で >開始:直前の動作の後 >遅延:(読み上げる音声の秒数) とするのではいけないのですか? あと、1行目がパワーポントとなっています。
ohikazuma

2021/02/28 05:50

サンプルプログラム付けてみました。
guest

回答2

0

VBA

1Option Explicit 2Dim cnt 3Public Sub OnSlideShowNextBuild(ByVal Wn As SlideShowWindow) 4 cnt = cnt + 1 5 Select Case cnt 6 Case 1: CreateObject("SAPI.SPvoice").Speak "これから現状分析します" 7 Case 2: CreateObject("SAPI.SPvoice").Speak "これが既存の状態です。" 8 Case 3: CreateObject("SAPI.SPvoice").Speak "最大の問題はこれです。" 9 End Select 10 Wn.SlideNavigation.Visible = True 11 Wn.SlideNavigation.Visible = False 12End Sub

と標準モジュールに書いたうえで、アニメーションを全て「直前の動作の後」にしておくと、
お望みの動きに近い感じになりました。
最後の2行は、「音声が全部終わってからアニメーションが動く」事象を回避するための苦肉の策です。
あとは、ActivePresentation.SlideShowWindow.View.GotoClickあたりでも試したのですが、
こちらも同事象が発生し解決できませんでした。
以上、何かのヒントになれば。

投稿2021/03/01 12:33

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

直接の答えにはなっていませんが、
音声をファイルとして出力しておいて、PowerPointファイルに挿入し、
アニメーションの1要素として組み入れるというのも一つの方法かと思います。
アニメーションの詳細設定で、
>開始:直前の動作の後
>遅延:xx秒
のように設定するイメージです。

以下は、音声をファイルとして出力するためのコードです。

VBA

1Function TextToAudioFile(text, path) 2 Dim FS As Object 3 Set FS = CreateObject("SAPI.SpFileStream") 4 With CreateObject("SAPI.SpVoice") 5 FS.Open path, 3 6 Set .AudioOutputStream = FS 7 .Speak text 8 FS.Close 9 End With 10End Function

投稿2021/02/28 13:23

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ohikazuma

2021/02/28 22:39

なるほどですね、こういう使い方もアリなのですね、勉強になります。 ただ、音声ファイルが多くなり過ぎ、修正時に…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問