본문 바로가기
Office/VBA

VBA Application.OnTime x Userform

by belitino 2016. 12. 5.

출처: http://stackoverflow.com/questions/32172889/application-ontime-doesnt-work-with-userform

 

VBA에서 주기적으로 어떤 작업을 하기 위해서 Application.OnTime 메소드를 많이 사용하실텐데요. 저도 특정 시간 후에 어떤 작업을 수행하기 위해서 Userform 안에서 OnTime 메소드 사용해서 Userform 안의 프로시져를 호출하도록 프로그램 했습니다.

 

그랬더니 아무런 에러 메시지도 안나오면서 정해진 시간에 원하는 프로시져가 수행이 안되더군요.

 

그래서 구글링을 했더니 출처에서 다음과 같은 답을 얻었습니다.

 

A procedure referenced from Application.OnTime must reside in a standard code module. It cannot be located in a class module, and userforms are specialized classes.

The procedure being called in the standard code module must be Public.

Your best bet is to relocate cyclic() to a standard code module and make it Public. Your command button click event procedure in the userform should then work with no alteration.

 

즉, Application.OnTime은 Userform안에 있어도 무방하지만, Application.OnTime이 호출하는 모듈은 Userform에 있으면 안되고, standard code module에서 Public으로 되어야 한다는 것이죠.

 

저도 Userform 안의 프로시져를 code 모듈로 옮기니 제대로 수행됩니다. 알고 보면 간단한 내용인데, 이걸 모르고 원인을 찾기 위해서 한참을 헤맸네요.