본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #14 [ 이벤트 필터링하기 ]

by 일등미노왕국 2023. 1. 15.

엑사남님 강의중 9강부터 14강에 이벤트에 관한 강의가 올라와 있다. 이 이 강좌들을 보면 이벤트에 대한 감이 좀 잡히게 될 것이다. 

 

매크로와 이벤트의 차이는 매크로는 전체적인 프로시저를 제어한다면 / 이벤트 프로시저는 해당하는 영역에 관해서 발생한다.

매크로는 모듈에서 작성되나, 이벤트는  Sheet에서 작성을 한다.

이번 구문에서 활용한것은 이벤트가 발생하였을 때 이벤트 영역을 설정한 후 매크로를 호출하는 형태로 진행하였다.

더블 클릭이벤트와 우클릭 이벤트는 맨 하단에 Cancel = true 이 구문을 꼭 넣어서 사용해야 매크로 이후에 더블클릭과 우클릭 고유의 명령이 실행되지 않는다.

 

이벤트가 진행될 때는 자칫하면 이벤트가 무한 반복되어 무한루프상태로 빠질 수 있기 때문에 

Application.EnableEvents = False 를 꼭 해줘서 작업하는 동안 불필요한 이벤트가 발생하지 않도록 하여야 하며

작업이 모두 종료되면 Application.EnableEvents = True 로 이벤트를 복원해줘야 한다.

 

더보기
Option Explicit

Sub 기초방14(rngAll As Range)

    Dim rngA As Range
    Dim i&
    
    Application.EnableEvents = False                          '= 이벤트 정지
    
    [b12].CurrentRegion.Offset(1).ClearContents
    
    For Each rngA In rngAll                                   '= 영역 순환
    
        For i = 1 To 4
        
            Cells(Rows.Count, 2).End(3)(2) = rngA(1, 1)       '= 이름
            Cells(Rows.Count, 3).End(3)(2) = Cells(3, i + 2)  '= 과목
            Cells(Rows.Count, 4).End(3)(2) = rngA(1, i + 1)   '= 점수
            
        
        Next i
    
    Next rngA
    
    Haja_format                                              '= 초기화

    Application.EnableEvents = True                          '= 이벤트 복원
    
End Sub

Private Function Haja_format()

    [b12].CurrentRegion.HorizontalAlignment = xlCenter      '= 가운데 정렬
        
End Function

 

구문자체는 어렵지 않기 때문에 추가 언급은 안해도 될것 같다.

허나 덧붙히면 Cells(rows.Count, 2) 는 Cells(rows.Count, "B") 와 같다...열이름을 열번호로 한것이다.

기초방#14.xlsm
0.02MB

 

댓글