Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Application_3|Application.EnableEvents|Worksheet_Change|Goto|

셀에 들어있는 정보를 바꿀때

Button을 크릭하면 어떤 버튼을 크릭하였는지 아는것이 중요하듯이
워크시트의 셀의 값을 바꿀때도 어떤 셀의 정보가 변하였는지
아는것이 중요하다
그것을 왜 알아야 하는데요??!!
엑셀프로그래밍은 사용자의 Action에 따라서 반응(Response)하는 Reaction을
만들어 주는 일이다

사용자가 어떤 Action(작업)을 하였느냐??
그것을 감지하여 Reaction(반작용적 작업)을 하여 주면 되는 것이다

우선 셀에 값을 바꿔 주는 순간!!(Event가 발생하는 순간)
Change Event가 발생하는것이다
이 순간에 무언가 작업을 해주면 된다
버튼을 크릭하면 어떤 작업을 하도록 프로시져를 연결해 주듯이..
셀의 정보가 변할때는 자동으로 프로시져의 틀이 만들어지는것이다
이벤트프로시져(Event Procedure)..
이벤트가 발생하는데 따른 어떤 절차(Procedure)를 작성해 주면 되는것이다



셀의 값이 변할때의 이벤트는 Range오브젝트가 제공하는것이 아니다
Worksheet오브젝트가 제공하는 이벤트이다
만약 Range("A1")셀에는 날자정보를 2006년이후의 날자만 입력하게 하고 싶은데
사용자가 엉뚱한 2006년 이전날자나 혹은 날자와 상관없는 정보를
입력한다면 일일이 쫓아 다니면서..제발 날자 정보만 부탁합니다!!
라고 할수 없는 짓이다

이벤트프로시져작성에서 필수적인 EnableEvents속성


이렇게 만들고 싶다

  • A열의 첫째셀은 "날자"라는 정보가 항상 유지되고
  • A열의 나머지 셀은 모두 2006/1/1~2006/12/31사이의 날자만 유효
  • 날자를 입력할때 중간을 비어놓고 입력못하게 한다
  • 중간에 비어놓고 입력하면 자동으로 입력한 날자가 유효한 셀로 이동한다



정보가 잘못 들어왔을때
이것을 수정하거나 지운다고 하는것도 역시 정보가
변하여 Change이벤트가 발생하게 되는것이다
그럼 쓸데없이 반복하여 이벤트프로시져를 불러댄다
이것을 방지하기 위하여
Application오브젝트는 EnableEvents라는 속성을 제공한다



정보를 수정할때마다 이벤트발생을 억제하기 위하여

Application.EnableEvents=False
정보입력A.
Application.EnableEvents=True

Application.EnableEvents=False
정보입력B..
Application.EnableEvents=True

와 같이 작업을 한다면 중복되는 일을 벌린다
또한 GoTo 문을 사용하여 별도의 프로시져를 호출하는것을 간략화한다



Validate User Input Data With Event Procedure