엑셀 VBA에서 Worksheet_BeforeDoubleClick 이벤트는 사용자가 특정 시트에서 셀을 더블 클릭할 때 실행되는 이벤트입니다.
즉, 더블 클릭을 감지하여 특정 동작을 자동으로 수행할 수 있도록 설정할 때 사용됩니다.
1. 기본 문법
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' 실행할 코드
End Sub
|
매개변수
|
설명
|
Target
|
사용자가 더블 클릭한 셀의 범위 (Range 개체)
|
Cancel
|
True로 설정하면 기본 더블 클릭 동작(편집 모드 진입)을 막음
|
📌 이 코드는 워크시트 개체(ThisWorkbook이 아닌 개별 시트)에 작성해야 함
📌 더블 클릭 동작을 비활성화하려면 Cancel = True 사용
2. 셀을 더블 클릭하면 메시지 표시
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox "더블 클릭한 셀: " & Target.Address
End Sub
|
📌 사용자가 셀을 더블 클릭하면 해당 셀 주소를 메시지로 표시
3. 더블 클릭 방지 (편집 모드 비활성화)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
|
📌 더블 클릭해도 셀 편집 모드로 들어가지 않도록 설정
4. 특정 범위에서만 더블 클릭 방지
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
Cancel = True
MsgBox "A1:A10 범위에서는 더블 클릭이 비활성화되었습니다."
End If
End Sub
|
📌 A1:A10 범위에서 더블 클릭하면 편집 모드를 비활성화하고 메시지 표시
5. 더블 클릭하면 특정 셀에 현재 날짜 입력
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target.Value = Date
Cancel = True
End Sub
|
📌 더블 클릭한 셀에 오늘 날짜를 자동 입력 (Cancel = True로 편집 모드 방지)
6. 더블 클릭하면 특정 시트로 이동
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$B$2" Then
Sheets("보고서").Activate
MsgBox "보고서 시트로 이동합니다."
Cancel = True
End If
End Sub
|
📌 B2 셀을 더블 클릭하면 "보고서" 시트로 자동 이동
7. 더블 클릭하면 특정 값을 입력 (체크/해제)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 3 Then ' C열(3번째 열)에서만 동작
If Target.Value = "✔" Then
Target.Value = ""
Else
Target.Value = "✔"
End If
Cancel = True
End If
End Sub
|
📌 C열을 더블 클릭하면 "✔" 체크 표시를 추가하거나 제거
8. 더블 클릭하면 색상 변경
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Interior.Color = RGB(255, 255, 0) Then ' 노란색이면
Target.Interior.Color = xlNone ' 원래대로
Else
Target.Interior.Color = RGB(255, 255, 0) ' 노란색으로 변경
End If
Cancel = True
End Sub
|
📌 셀을 더블 클릭하면 노란색으로 변경, 다시 클릭하면 원래대로 복구
9. 더블 클릭 시 입력된 데이터 삭제
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not IsEmpty(Target) Then
Target.ClearContents
MsgBox "데이터가 삭제되었습니다."
Cancel = True
End If
End Sub
|
📌 더블 클릭하면 셀의 데이터를 삭제하고 메시지 표시
10. 더블 클릭하면 특정 매크로 실행
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$D$5" Then
Call 내매크로
Cancel = True
End If
End Sub
Sub 내매크로()
MsgBox "D5 셀을 더블 클릭하여 매크로가 실행되었습니다!"
End Sub
|
📌 D5 셀을 더블 클릭하면 내매크로 실행
11. 더블 클릭하면 하이퍼링크처럼 다른 시트로 이동
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Value
Case "홈"
Sheets("홈").Activate
Case "보고서"
Sheets("보고서").Activate
Case "데이터"
Sheets("데이터").Activate
End Select
Cancel = True
End Sub
|
📌 셀에 "홈", "보고서", "데이터"가 입력된 경우, 해당 시트로 이동
12. 더블 클릭한 셀의 값으로 필터 적용
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
ActiveSheet.Range("A1:A100").AutoFilter Field:=1, Criteria1:=Target.Value
Cancel = True
End If
End Sub
|
📌 A2:A100 셀을 더블 클릭하면 해당 값으로 자동 필터 적용
13. 더블 클릭하면 음성 안내 실행
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim SpeakText As String
SpeakText = "더블 클릭한 값은 " & Target.Value & "입니다."
Application.Speech.Speak SpeakText
Cancel = True
End Sub
|
📌 더블 클릭한 셀의 값을 음성으로 읽어줌 (Windows TTS 기능 활용)
📌 BeforeDoubleClick 사용 시 주의할 점
- 해당 이벤트는 워크시트 개체(Sheet1, Sheet2, ...)에서만 동작
- → 모듈(Module)에 작성하면 실행되지 않음
- Cancel = True를 설정하지 않으면 기본 더블 클릭 동작(편집 모드)도 실행됨
- Intersect(Target, 범위)를 사용하여 특정 범위에서만 실행하도록 제한 가능
- 셀의 값이 변경되는 경우 Target.Value 활용 가능
📝 정리
기능
|
VBA 코드 (Worksheet_BeforeDoubleClick)
|
더블 클릭 시 메시지 표시
|
MsgBox "셀 주소: " & Target.Address
|
더블 클릭 방지 (편집 모드 비활성화)
|
Cancel = True
|
특정 범위에서만 실행
|
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
|
셀을 더블 클릭하면 현재 날짜 입력
|
Target.Value = Date
|
더블 클릭하면 시트 이동
|
Sheets("보고서").Activate
|
체크박스처럼 "✔" 입력/제거
|
If Target.Value = "✔" Then Target.Value = "" Else Target.Value = "✔"
|
셀 배경색 변경 (노란색 토글)
|
Target.Interior.Color = RGB(255,255,0)
|
더블 클릭하면 데이터 삭제
|
Target.ClearContents
|
하이퍼링크처럼 특정 시트로 이동
|
Select Case Target.Value 활용
|
더블 클릭한 값으로 자동 필터 적용
|
ActiveSheet.Range("A1:A100").AutoFilter
|
더블 클릭한 값 음성 출력
|
Application.Speech.Speak Target.Value
|
🔥 VBA의 BeforeDoubleClick을 활용하면 편집 모드를 방지하고, 자동화 기능을 추가할 수 있습니다! 🚀