Excel VBA(マクロ)でセルの内容を読上げ-その2
前回に引き続き、Excel VBA(マクロ)で、セルの内容を読上げる方法について書いていきます。
前回は、Haruka以外の声で読上げる方法についてでした。
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その1
動画に埋め込むには、音声ファイルへの書き出しが必要ですので、今回はファイルへの書き出しについてです。
読上げ先をファイルにする
通常は、スピーカーへ向かって読上げるので、これをファイルに出力します。
'声を入れるためのオブジェクト変数
Dim HarukaVoice, AyumiVoice, SayakaVoice, IchiroVoice, ZirVoice As Object
'SpeechAPIのSpVoiceおよびSpObjectTokenCategoryの変数
Dim sapi, cat As Object
'SpeechAPIのSpFileStreamの変数
Dim stream AsObject
Sub 録音()
'File名の変数
Dim fName As Variant
'SpeechAPI設定
Set sapi = CreateObject("SAPI.SpVoice")
'録音用設定
Set stream = CreateObject("SAPI.SpFileStream")
'話し手の設定
Call voice_object
'File名設定 デスクトップに「読上げ.wav」で保存
fName = Environ("UserProfile") & "¥デスクトップ¥読上げ.wav"
'保存用にファイルを上書きで開く
stream.Open fName, 3
'録音先設定
Set sapi.AudioOutputStream = stream
'読み手 一郎
Set sapi.Voice = IchiroVoice
'現在地の内容を読上げ
sapi.Speak ActiveCell
'完了したらファイルを閉じる
stream.Close
'録音オブジェクトを解放
Set stream = Nothing
'SAPIを解放
Set sapi = Nothing
End Sub
「voice_object」をCallしてますが、前回で記述したPrivate Sub です。
ファイル名設定で、「Environ("UserProfile")」の部分は、Windows環境変数を使うという指示で
「C:¥users¥ユーザー名」が得られます。
名前を付けて保存にする
マクロを修正したり、保存されたファイルを後で移動したりするのは面倒なので、
名前を付けて保存します。
Sub 録音()
'File名の変数
Dim fName As Variant
'日付用変数
Dim today As Date
'SpeechAPI設定
Set sapi = CreateObject("SAPI.SpVoice")
'録音用設定
Set stream = CreateObject("SAPI.SpFileStream")
'話し手の設定
Call voice_object
'今日
today = Date
'ファイル名をyyyymmdd.wavに設定
fName = Year(today) & Right("0" & Month(today), 2) & Right("0" & Day(today), 2) _
& ".wav"
'保存先名をダイアログボックスを開いて設定
fName = Application.GetSaveAsFilename(fName, "音声,*.wav")
'キャンセルの場合は、終了
If fName = False Then Exit Sub
'保存用にファイルを上書きで開く
stream.Open fName, 3
'録音先設定
Set sapi.AudioOutputStream = stream
'読み手 一郎
Set sapi.Voice = IchiroVoice
'現在地の内容を読上げ
sapi.Speak ActiveCell
'完了したらファイルを閉じる
stream.Close
'録音オブジェクトを解放
Set stream = Nothing
'SAPIを解放
Set sapi = Nothing
End Sub
ファイル名は、初期値で今日の日付を「yyyymmdd」で示すことにしています。
初期値のファイル名は、「yyyymmdd.wav」になります。
その後、名前を付けて保存のダイアログボックスを開いて、設定できるようにします。
それが、
fName = Application.GetSaveAsFilename(fName, "音声,*.wav")
の部分です。
「Application.GetSaveAsFilename()」で、名前を付けて保存のダイアログボックスが開きます。
()内のfNameが初期値のyyyymmdd.wavで、ダイアログボックスの結果が左のfNameに入ります。
()内の"音声,*.wav"は、ダイアログボックスで表示するファイルを絞る目的です。
名前を付けて保存のダイアログボックスで、キャンセルが押されると、fNameに「False」が返ってきますので、録音そのものを止めて、終了します。