- ベストアンサー
Excelで音声再生時に並行して別の操作をしたい方法
- Excelで音声再生時に並行して別の操作を行いたい場合、VBAプログラムを書き換えることで実現することができます。
- 具体的には、PlaySound関数の呼び出しにSND_ASYNCフラグを指定することで、音声再生後すぐに制御を戻すことができます。
- また、再生が完了するまで制御を戻さない場合は、SND_SYNCフラグを指定することで実現できます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんな風かな? VBAでは並列して行うのが苦手なので、操作していてカクつくのは致し方のない事です。 回避する方法があるかもしれませんが不明。 当方Windows7 & Excel2010です。 Declare Function PlaySound Lib "Winmm.dll" Alias "PlaySoundA" _ (ByVal pszSound As String, _ ByVal hmod As Long, _ ByVal fdwSound As Long) As Long Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Const SND_ASYNC = &H1& '再生後すぐに制御を戻す Public Const SND_SYNC = &H0& '再生が完了するまで制御を戻さない Private Function MusicLength(ByVal FilePath As String) As Date Dim oSH As Object, oFS As Object, oFLD As Object, oF As Object Dim sT As Date Set oSH = CreateObject("Shell.Application") Set oFS = CreateObject("Scripting.FileSystemObject") Set oF = oFS.getfile(FilePath) Set oFLD = oSH.Namespace(oF.ParentFolder.Path) sT = CDate(oFLD.GetDetailsOf(oFLD.ParseName(oF.Name), 27)) MusicLength = sT + #12:00:01 AM# End Function Sub C列再生() Dim En As Long, i As Long Dim INF As String Dim ML As Date, sT As Date En = Range("A65536").End(xlUp).Row For i = 2 To En INF = ThisWorkbook.Path & "\ONSEI-n\" & Range("C" & i).Value & ".WAV" ML = MusicLength(INF) PlaySound INF, 0, SND_ASYNC ' sT = Now Do Until Now > sT + ML Sleep 100 DoEvents Loop Next i End Sub ※#12:00:01 AM# は、ごく短い音「ポッ」などはゼロ秒になるので1秒下駄をはかせています。
お礼
早速のご回答ありがとうございました。 プログラムを書き換えたところ、音声再生と並行してスクロールなどの操作ができるようになりました。 何か月も前から悩んでいたのですが、お陰様で一遍に解決することができました。 今後ともよろしくお願いいたします。