이 페이지에서
구문
= PlayAlarm ( [알림음종류], [완료대기] )
인수구분
형식 설명
알림음종류
선택
String
출력할 알림음 종류를 입력합니다. 기본값은 "Beep" 입니다.
기본 알림음 외의 특정 알림음은 "Windows\Media\" 폴더에 위치한 ".wav" 형식의 파일명을 직접 입력합니다.
완료대기
선택
Boolean
TRUE 일 경우 알림음이 종료될 때 까지 다른 작업을 하지 않고 대기합니다. 기본값은 FALSE 입니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요#If VBA7 Then
Public Declare PtrSafe Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
(ByVal lpszName As String, ByVal hModule As LongPtr, ByVal dwFlags As Long) As Long
#Else
Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
(ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
#End If
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ PlayAlarm 함수
'▶ 윈도우 알림음을 출력하는 함수입니다.
'▶ 인수 설명
'_____________AlarmName : 출력할 알림음 종류입니다.
'_____________Wait : TRUE일 경우 알림음 출력이 완료될 때 까지 대기합니다.
'###############################################################
Public Function PlayAlarm(Optional AlarmName As String = "Beep" _
, Optional Wait As Boolean = False) As Variant
' 변수 설정
Dim Flags As Long
Const SND_SYNC = &H0 ' 알림음이 종료될 때까지 기다립니다.
Const SND_ASYNC = &H1 ' 알림음 출력 후 바로 다음 작업으로 넘어갑니다.
Const SND_ALIAS = &H10000 ' 시스템 알림음을 사용합니다.
Const SND_FILENAME = &H20000 ' WAV 파일을 출력합니다.
' 결과값 반환 및 flags 기본값 설정
BeepThis2 = AlarmName
Flags = SND_ALIAS '기본값을 시스템 알림음으로 설정
' 알림음의 대소문자 변경 (첫글자만 대문자로)
AlarmName = StrConv(AlarmName, vbProperCase)
' 알림음 조건에 따라 알림음 경로 설정
Select Case AlarmName
Case "Beep"
Beep ' Beep 은 기본 경고음 출력
Exit Function
Case "Asterisk", "Exclamation", "Hand", "Notification", "Question"
AlarmName = "System" + AlarmName
Case "Connect", "Disconnect", "Fail"
AlarmName = "Device" + AlarmName
Case "Mail", "Reminder"
AlarmName = "Notification." + AlarmName
Case "Text"
AlarmName = "Notification.SMS"
Case "Message"
AlarmName = "Notification.IM"
Case "Fax"
AlarmName = "FaxBeep"
Case "Select"
AlarmName = "CCSelect"
Case "Error"
AlarmName = "AppGPFault"
Case "Default"
AlarmName = "." & AlarmName
Case "Chimes", "Chord", "Ding", "Notify", "Recycle", "Ringout", "Tada"
AlarmName = Environ("SystemRoot") & "\Media\" & AlarmName & ".wav"
Flags = SND_FILENAME
Case Else
If LCase(Right(AlarmName, 4)) <> ".wav" Then AlarmName = AlarmName & ".wav"
If Dir(AlarmName) = "" Then
AlarmName = ActiveWorkbook.Path & "\" & AlarmName
If Dir(AlarmName) = "" Then AlarmName = Replace(AlarmName, ActiveWorkbook.Path & "\", Environ("SystemRoot") & "\Media\")
End If
Flags = SND_FILENAME
End Select
' 알림음 출력시 기다림 여부에 따라 PlaySound 옵션 변경
Flags = Flags + IIf(Wait, SND_SYNC, SND_ASYNC)
' 알림음 출력 후 명령문 종료 (알림음 경로 없을 시 기본 알림음 출력)
PlaySound AlarmName, 0, Flags
End Function
활용 예제
윈도우 기본 알림음 출력하기
Sub Test()
PlayAlarm
End Sub
시간대에 따라 특정 알림음을 지정해서 출력하기
Sub Test2()
'오후 6시 이전이면 차임벨소리, 오후 6시 이후면 실패 알림음을 출력합니다.
If Hour(Now) < 18 Then
PlayAlarm "Chimes"
Else
PlayAlarm "Fail"
End If
End Sub
안내사항
윈도우 알림음 출력에는 "winmm.dll" 라이브러리의 "PlaySound" 함수가 사용됩니다.
사용 중인 윈도우 버전에 따라 지원되는 알림음 종류가 다를 수도 있습니다.
단, 엑셀이 항상 실행된 상태여야만 합니다.