윈도우 알림음 출력 :: PlayAlarm 명령문 사용법 총정리
엑셀 PlayAlarm 명령문 목차 바로가기
요약
엑셀 PlayAlarm 함수는 윈도우 알림음을 출력하는 함수입니다. 윈도우 기본 알림음 및 특정 알림음을 지정하여 출력할 수 있습니다.
명령문 구문
= PlayAlarm ( [알림음종류], [완료대기] )
사용된 인수 및 변수 알아보기
인수 | 설명 |
알림음종류 [String, 선택인수] |
출력할 알림음 종류를 입력합니다. 기본값은 "Beep" 입니다. 기본 알림음 외의 특정 알림음은 직접 입력합니다.
특정 알림음은 "Windows\Media\" 폴더에 위치한 ".wav" 형식의 파일입니다. 사용중인 윈도우 버전에 따라 지원되는 알림음 종류가 다를 수도 있습니다.
|
완료대기 [Boolean, 선택인수] |
TRUE 일 경우 알림음이 종료될 때 까지 다른 작업을 하지 않고 대기합니다. 기본값은 FALSE 입니다. |
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [엑셀VBA함수] PlayAlarm 함수예제파일
상세 설명
엑셀 PlayAlarm 함수는 윈도우 알림음을 출력하는 함수입니다. 윈도우에서 제공하는 기본 알림음 및 "Windows\Media\" 폴더에 있는 ".wav" 형식의 특정 알림음을 지정해서 출력할 수 있습니다. 기본 알림음은 "Beep" 입니다.
윈도우 알림음 출력 함수에는 "winmm.dll" 라이브러리의 "PlaySound" 함수가 사용됩니다. "PlaySound" 함수에 대한 자세한 설명은 아래 관련 링크를 참고하세요.
실전 사용 예제
- 윈도우 기본 알림음 출력하기
Sub Test() PlayAlarm End Sub
- 시간대에 따라 특정 알림음을 지정해서 출력하기
Sub Test2() '오후 6시 이전이면 차임벨소리, 오후 6시 이후면 실패 알림음을 출력합니다. If Hour(Now) < 18 Then PlayAlarm "Chimes" Else PlayAlarm "Fail" End If End Sub
윈도우 기본알림음 출력, PlayAlarm명령문 동작원리
PlayAlarm명령문 전체 코드
#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
명령문 동작원리 단계별 알아보기
- 사용중인 버전(32/64비트)에 따라 PlaySound 함수를 불러옵니다.
#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
- 변수를 설정합니다.
' 변수 설정 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 옵션에 대한 자세한 설명은 PlaySound 함수 설명에서 확인할 수 있습니다.
' 알림음 출력시 기다림 여부에 따라 PlaySound 옵션 변경 Flags = Flags + IIf(Wait, SND_SYNC, SND_ASYNC)
- 알림음 출력 후 명령문을 종료합니다.
' 알림음 출력 후 명령문 종료 (알림음 경로 없을 시 기본 알림음 출력) PlaySound AlarmName, 0, Flags
ThisAlarm 함수는 아래 페이지를 참고하여 제작되었습니다.
https://wellsr.com/vba/2019/excel/vba-playsound-to-play-system-sounds-and-wav-files/ - 윈도우 기본 알림음 출력하기