메뉴

PlayAlarm

Function

윈도우 알림음을 출력하는 VBA 사용자 지정 함수로, 기본 알림음과 특정 알림음을 지정해 재생할 수 있습니다.

PlayAlarm 코드 미리보기
구문 = PlayAlarm ( [알림음종류], [완료대기] )
인수구분 형식 설명
알림음종류 선택 String
출력할 알림음 종류를 입력합니다. 기본값은 "Beep" 입니다.
기본 알림음 외의 특정 알림음은 "Windows\Media\" 폴더에 위치한 ".wav" 형식의 파일명을 직접 입력합니다.
완료대기 선택 Boolean
TRUE 일 경우 알림음이 종료될 때 까지 다른 작업을 하지 않고 대기합니다. 기본값은 FALSE 입니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

활용 예제

윈도우 기본 알림음 출력하기
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" 함수가 사용됩니다.
사용 중인 윈도우 버전에 따라 지원되는 알림음 종류가 다를 수도 있습니다.
댓글 5
5 (3개 평가)
SEANPAUL
SEANPAUL 2020.08.16 19:08
감사합니다.
엑셀고수가되고싶다
엑셀고수가되고싶다 2020.08.26 16:15
이해가 잘 안되는데ㅜㅜ 제가 셀에 6시 입력하면 6시에 알람이 자동으로 울리게 할 수 있나요??
오빠두엑셀
오빠두엑셀 작성자 2020.08.26 19:46
사용자 지정함수로 코드를 작성할 수 있으시다면, 해당 기능을 구현할 수 있습니다. :)
단, 엑셀이 항상 실행된 상태여야만 합니다.
엑셀고수가되고싶다
엑셀고수가되고싶다 2020.08.28 19:49
빠른 답변 너무 감사드립니다. 어떤 말씀인지는 알겠습니다. VBA를 통해 새로운 함수를 만드라는 건데, 전체적인 내용은 이해가 가는데, 제가 입력한 시간에 따라 바뀌어야 하는데 IF말고 어떤걸 써야하나요...?
강민준🤗
강민준🤗 2024.08.11 12:54
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료