질문하기 게시판에 어떤 분이 질문하셨던 내용을 답변으로 작성했던 내용입니다.
답변을 얻으신 다음에, 게시물을 삭제해서 팁란에 게시합니다.
그러시면 안되죠.. =_=;;
그럼.. 제가 작성한 답변은 뻘짓인가요? =_=;;
질문의 내용은 아래와 같았습니다.
1. 엑셀에서 소리내는 방법
2. 특정 영역에 데이터가 0또는 1로 바뀔때 각각 다른 소리 내는 방법
3. 수식으로 연결된 셀도 원 데이터가 바뀌여서 연결된 값이 바뀔때도 소리 나게 하는 방법
답변으로 만든 파일입니다.
다운받기 :
abyul_playSound_20101118-3.xlsm
abyul_playSound_20101118-3_64bit.xlsm
소스는 아래를 참고하세요..
[ WorkSheet의 코드]
Private Sub Worksheet_Change(ByVal Target As Range) '엑셀 시트에서 "$C$5:$C$9" 범위를 "monitorRange"라는 이름으로 정의해두었습니다. With [monitorRange] If Target.Column < .Column Or Target.Column > .Column + .Columns.Count - 1 Then Exit Sub If Target.Row < .Row Or Target.Row > .Row + .Rows.Count - 1 Then Exit Sub End With If Target.Cells.Count > 1 Then Exit Sub If Target.Value = 1 Then Call testSound1 If Target.Value = 0 Then Call testSound2 End Sub
Private Sub Worksheet_Calculate() Call checkChanged End Sub
Sub checkChanged() Dim i As Integer For i = 1 To [monitorRange].Cells.Count If [monitorRange].Cells(i) <> [bufferRange].Cells(i) Then If [monitorRange].Cells(i) = 1 And [bufferRange].Cells(i) = 0 Then Call testSound1 ElseIf [monitorRange].Cells(i) = 0 And [bufferRange].Cells(i) = 1 Then Call testSound2 Else Call copyToBuffer End If End If Next i End Sub
Private Sub Worksheet_Deactivate() Call copyToBuffer End Sub
Sub copyToBuffer() [bufferRange].Value = [monitorRange].Value End Sub |
[ Module 부분의 소스 ]
'http://support.microsoft.com/kb/158140/ko Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _ (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Const SND_ASYNC = &H1 Sub testSound1() If Application.CanPlaySounds Then Call sndPlaySound32("C:\WINDOWS\Media\tada.wav", SND_ASYNC) End Sub Sub testSound2() If Application.CanPlaySounds Then Call sndPlaySound32("C:\WINDOWS\Media\notify.wav", SND_ASYNC) End Sub |
참고로.. 소리내는 소스는 아래 코드도 참고해보세요.
'====================================================================================== 'http://support.microsoft.com/kb/86281/ko
Private Declare Function sndPlaySound Lib "winmm.dll" Alias _ "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Const SND_SYNC = &H0 Const SND_ASYNC = &H1 Const SND_NODEFAULT = &H2 Const SND_LOOP = &H8 Const SND_NOSTOP = &H10
Sub testSound1() SoundName$ = "C:\WINDOWS\Media\tada.wav" wFlags% = SND_ASYNC Or SND_NODEFAULT x% = sndPlaySound(SoundName$, wFlags%) End Sub Sub testSound2() SoundName$ = "C:\WINDOWS\Media\notify.wav" wFlags% = SND_ASYNC Or SND_NODEFAULT x% = sndPlaySound(SoundName$, wFlags%) End Sub
|