윈도우 알림음 출력 :: 엑셀 PlayAlarm 함수 사용법

윈도우 알림음 또는 기본 알림음을 지정하여 출력하는 PlayAlarm 함수의 사용법 및 동작원리를 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2020. 10. 12. 02:18
URL 복사
메모 남기기 : (5)

윈도우 알림음 출력 :: PlayAlarm 명령문 사용법 총정리

엑셀 PlayAlarm 명령문 목차 바로가기
요약

엑셀 PlayAlarm 함수는 도우 알림음을 출력하는 함수입니다. 윈도우 기본 알림음 및 특정 알림음을 지정하여 출력할 수 있습니다.

명령문 구문
= PlayAlarm ( [알림음종류], [완료대기] )
사용된 인수 및 변수 알아보기
인수 설명
알림음종류
[String, 선택인수]
출력할 알림음 종류를 입력합니다. 기본값은 "Beep" 입니다. 기본 알림음 외의 특정 알림음은 직접 입력합니다.

특정 알림음은 "Windows\Media\" 폴더에 위치한 ".wav" 형식의 파일입니다. 사용중인 윈도우 버전에 따라 지원되는 알림음 종류가 다를 수도 있습니다.

  • Beep [기본값]
  • Asterisk
  • Exclamation
  • Hand
  • Notification
  • Question
  • Connect
  • Disconnect
  • Fail
  • Mail
  • Reminder
  • Text
  • Message
  • Fax
  • Select
  • Error
  • Default
  • Chimes
  • Chord
  • Ding
  • Notify
  • Recycle
  • Ringout
  • Tada
  • 그 외 (직접 입력)
완료대기
[Boolean, 선택인수]
TRUE 일 경우 알림음이 종료될 때 까지 다른 작업을 하지 않고 대기합니다. 기본값은 FALSE 입니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


상세 설명

엑셀 PlayAlarm 함수는 윈도우 알림음을 출력하는 함수입니다. 윈도우에서 제공하는 기본 알림음 및 "Windows\Media\" 폴더에 있는 ".wav" 형식의 특정 알림음을 지정해서 출력할 수 있습니다. 기본 알림음은 "Beep" 입니다.

윈도우 알림음 출력 함수에는 "winmm.dll" 라이브러리의 "PlaySound" 함수가 사용됩니다. "PlaySound" 함수에 대한 자세한 설명은 아래 관련 링크를 참고하세요.

실전 사용 예제
  1. 윈도우 기본 알림음 출력하기
    Sub Test()
     
    PlayAlarm
     
    End Sub
  2. 시간대에 따라 특정 알림음을 지정해서 출력하기
    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
명령문 동작원리 단계별 알아보기
  1. 사용중인 버전(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
  2. 변수를 설정합니다.
    ' 변수 설정
    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   '기본값을 시스템 알림음으로 설정
  3. 알림음 이름의 대소문자를 변경합니다. (오류방지)
    ' 알림음의 대소문자 변경 (첫글자만 대문자로)
    AlarmName = StrConv(AlarmName, vbProperCase)
  4. 알림음 종류에 따라 알림음 출력 경로를 변경합니다.
    ' 알림음 조건에 따라 알림음 경로 설정
    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
  5. 완료대기 여부에 따라 PlaySound 함수의 Flags 옵션을 변경합니다. Flags 옵션에 대한 자세한 설명은 PlaySound 함수 설명에서 확인할 수 있습니다.
    ' 알림음 출력시 기다림 여부에 따라 PlaySound 옵션 변경
        Flags = Flags + IIf(Wait, SND_SYNC, SND_ASYNC)
  6. 알림음 출력 후 명령문을 종료합니다.
    ' 알림음 출력 후 명령문 종료 (알림음 경로 없을 시 기본 알림음 출력)
        PlaySound AlarmName, 0, Flags

ThisAlarm 함수는 아래 페이지를 참고하여 제작되었습니다.
https://wellsr.com/vba/2019/excel/vba-playsound-to-play-system-sounds-and-wav-files/

5 3 투표
게시글평점
5 댓글
Inline Feedbacks
모든 댓글 보기
5
0
여러분의 생각을 댓글로 남겨주세요.x