본문 바로가기
엑셀 (Excel)/엑셀 매크로 VBA

Excel 엑셀 매크로 Activate + Deactivate 이벤트 만들기

by ★√★ 2021. 3. 14.

안녕하세요, Davey 입니다. 오늘 포스팅 할 내용은 Excel 엑셀 매크로에 구현 할 수 있는, 이벤트 중에, Activate 와 Deactivate 이벤트에 대한 내용입니다. 일단, Activate 와 Deactivate 이벤트에 대한 설명 부터 시작하도록 하겠습니다.

 

쉬운 이해를 돕기 위해 관련 설명의 예제를 통해서 하나 하나 설명 드리도록 하겠습니다. 

 

1. Activate 이벤트

: Sheet를 Activate 즉, 선택을 했을 때, 발생하는 이벤트를 말하는 것이면, 초기 세팅은 아래 메뉴를 선택해서, Code를 구현 할 수 있습니다.

 

 1) 오른쪽 메뉴 창

Activate-이벤트-설명1

 2) 코드 구현 창 ( Worksheet를 선택을 하면 오른쪽 Select List에 Activate를 선택을 하시면 됩니다.)

Activate-이벤트-설명2
Activate-이벤트

 3) Code 구현

  : 위 코드 구현 창에 코드를 구현하시면 됩니다. 하나의 예제 코드를 통해서 구동 되는 내용을 설명 드리도록 하겠습니다. 구현할 Code는 내용은 간단히 아래와 같습니다. 

 

 - Master Sheet를 선택하는 횟수를 입력을 한 줄씩 내려가면서 입력 + 테두리까지 설정.

 - 동시에, Master Sheet를 선택하는 횟수를 입력의 총합을 "B2" 에 입력

 - 초기 Excel Form은 아래와 같습니다. 

 

Activate-이벤트-설명3
Activate-이벤트

 

 

- 관련 Code는 아래와 같습니다. 

 

============================================================================

Private Sub Worksheet_Activate()





Dim Range01 As Range   ' Master Sheet를 선택하는 횟수를 입력하는 모든 셀의 범위 정의 변수 선언

 

 

 If Cells(2, "A").Value <> "" Then    ' A2 의 값이 있는지 없는지를 검증

   

     'A2 의 값이 있으면, 최하단의 Row에서 횟수를 입력

    

     Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Cells(Rows.Count, "A").End(xlUp).Value + 1

 

 Else

    

     'A2 의 값이 없다면, A2에 값을 입력

     Cells(2, "A").Value = Cells(2, "A").Value + 1

   

  End If

 

  Set Range01 = Range(Cells(Rows.Count, "A").End(xlUp), "A1") 

  ' Master Sheet를 선택하는 횟수를 입력하는 모든 셀의 범위를 입력

 

  Range01.Select

    

    ' Master Sheet를 선택하는 횟수를 입력하는 모든 셀의 범위의 테두리를 사각면 다 치는 걸로 명령

    Selection.Borders(xlDiagonalDown).LineStyle = xlNone

    Selection.Borders(xlDiagonalUp).LineStyle = xlNone

    With Selection.Borders(xlEdgeLeft)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

    With Selection.Borders(xlEdgeTop)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

    With Selection.Borders(xlEdgeBottom)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

    With Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

    With Selection.Borders(xlInsideVertical)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

    With Selection.Borders(xlInsideHorizontal)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

 

 

  ' 입력하는 동시에, 총 선택 횟수를 따로, 보기 좋게, B2에도 입력

  Cells(2, "B").Value = Cells(2, "B").Value + 1



End Sub

 

============================================================================

 

- 위 코드를 실행 시켜 보면, 아래와 같이 구현이 됩니다. 아래 결과 창은 다른 Sheet를 선택했다가, Master Sheet를 4번 선택할 때 보여지는 결과 창입니다. 

 

Activate-이벤트-구현
Activate-이벤트-구현

 

 

2. Deactivate 이벤트

: Activate 이벤트의 반대 상황에 발생하는 이벤트로서, 해당 Sheet를 선택하지 않았을 때 발생하는 이벤트 입니다. 아래 메뉴를 통해서 Code를 구현 할 수 있습니ㅏㄷ. 

 

 1) 오른쪽 메뉴 창

Deactivate-이벤트-설명1
Deactivate-이벤트

2) 코드 구현 창 ( Worksheet를 선택을 하면 오른쪽 Select List에 Deactivate를 선택을 하시면 됩니다.)

 

Deactivate-이벤트-설명2
Deactivate-이벤트-이벤트

 

 3) Code 구현

  : 위 코드 구현 창에 코드를 구현하시면 됩니다. 하나의 예제 코드를 통해서 구동 되는 내용을 설명 드리도록 하겠습니다. 구현할 Code는 내용은 간단히 아래와 같습니다. 위에 Activate Code는 그대로 두도록 하겠습니다. 같이 작동하는 방법도 참조 하시면 도움이 되실 겁니다.

 

 - Master Sheet에서, 다른 Sheet를 선택할 때 그 선택 횟수를, Sheet 별로 입력함.

 - Activate Code는 그대로 두기 때문에, 같이 작동함.

 - 관련 Code는 아래와 같습니다. 

 

============================================================================

 

Private Sub Worksheet_Deactivate()

 

 

 Select Case ActiveSheet.Name  ' 선택하는 Sheet에 마다, Sheet 이름에 맞춰서, C2, D2에 Couting 함

 

 

   Case "TEST1"

  

    Range("C2").Value = Range("C2").Value + 1 ' 선택하는 Sheet가 TEST1일 경우에, C2에 +1 씩 증가함.

      

     

   Case "TEST2"

  

      Range("D2").Value = Range("D2").Value + 1

 

  

   Case Else

  

 

 End Select

  

End Sub

============================================================================

 

- 위 코드를 실행 시켜 보면 아래와 같습니다. 아래 결과는 TEST1을 3번 선택하고, TEST2를 2번 선택한 결과 창입니다. 위에 결과에서 Master Sheet를 4번 선택하여, "4"가 입력되어 있는데, 5번 TEST1, TEST2에 갔다가 왔으니까, 4+5 해서 9번 Master Sheet를 선택한 걸 동시에 알 수 있습니다. 

 

Deactivate-이벤트-구현
Deactivate-이벤트-구현

 

이상입니다. 위의 코드는 정말 Simple 하고, 주로 일을 할 때 쓰이지는 않지만, 이 이벤트를 알고 있다가, 현업이나, 개인적인 일로, 써야 될 때 알고 있는 것과 찾을 려고 하는 것과는 천지 차이라고 생각합니다. 그리고 여러가지의 지식을 가지고 있어야, 응용도 가능할 것이라고 생각합니다. 오늘도 Excel Macro 공부 하시느라 수고하셨습니다. 같이 지식 공유하면서, 같이 성장하시죠. 감사합니다. 

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab