Excel VBA 質問スレ Part41©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0568555
2016/06/10(金) 03:53:33.12ID:WIrOC41uグローバル変数とかにすればLoop待ちせず完全に非同期に出来るみたいね
…ついでにクラスモジュール化してみた
--- 標準モジュール(テスト用)
Private clsSpv As New SpeechAPI
Sub test()
Call clsSpv.Speak("Hello World")
Call clsSpv.Speak("Speech API Test")
End Sub
--- クラスモジュール(SpeechAPI.cls)
Private Const SVSFlagsAsync = 1 '非同期
Private objSpV As Object
Private Sub Class_Initialize()
Set objSpV = CreateObject("SAPI.SpVoice")
End Sub
Private Sub Class_Terminate()
Call Me.WaitSpeak 'Speak終了前に破棄されそうな場合は待機
Set objSpV = Nothing
End Sub
Sub Speak(SpeakText)
Call objSpV.Speak(SpeakText, SVSFlagsAsync)
End Sub
Sub WaitSpeak()
Do
DoEvents
Loop Until objSpV.WaitUntilDone(10)
End Sub
■ このスレッドは過去ログ倉庫に格納されています