WindowsAPIを使ってExcel VBA(マクロ)で音・曲を再生する方法/sndPlaySound関数の使い方

IT

Windows APIを使って音を鳴らす方法です。Excel自体の機能で音を鳴らしたい場合はBeepとShellの記事を参照してください。

Advertisements

関数のAPI宣言

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String,ByVal uFlags As Long) As Long
Windowsの機能であるAPIを使用する場合、VBA側では最初に使う旨宣言する必要があります。
要するにこのコードを一番最初にコピペすればOKです。
sndplay1
入力すると、64bitの場合エラーが出るので、
Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
エラー内容の指示に従い、Functionの前にPtrSafeを入力しておきます。

sndPlaySound関数の使い方

sndplay2
まず最初にsndPlaySoundを書きます。
sndplay3
sndPlaySound関数には引数がふたつあって、よく見るとAPI宣言でも宣言されています。
ひとつはlpszSoundNameで、ファイルのパスを拡張子まで含めて記述します(パスの取得方法もShell参照)。今回はWindowsのMediaフォルダにあるWavファイルを再生することにします。
sndplay4
もうひとつはuFlagsで、0と1を指定できます。
0だと音声再生中はExcelの処理が停止(操作も不可能)、1だと再生中も処理続行、となります。
sndplay5
引数のフィールド名は普通のメソッド同様、所定の順番で書くことで省略可能です。
' vba
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
' エラー出る場合はDeclare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Option Explicit
Sub macro1()
' uFlagsが0だと曲再生中何もできなくなるので注意
sndPlaySound "C:\Windows\Media\Alarm04.wav", 0
End Sub
やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント