본문 바로가기

Office/VBA17

VBA에서 #define, #ifdef와 유사한 문장 사용 방법 출처: https://stackoverflow.com/questions/926561/ifdef-equivalent-in-vba http://www.pgacon.com/visualbasic.htm#Take%20Advantage%20of%20Conditional%20Compilation VBA로 프로그래밍을 하다보니 중간에 디버깅을 위해서 여러 변수들을 출력하거나 변수값을 임의로 변경해서 돌려보다가 제대로 동작하면 이 부분의 코드를 다시 지우고 수정하는 작업을 하는게 필요했습니다. 코드가 단순하면 특정 부분만 수정/복구하면 되는데, 코드가 길어지다보니 여러 곳을 수정하다가 잘못해서 디버깅 코드가 남아있어서 동작을 잘못하게 되는 경우도 발생하고 코드를 수정하는 작업도 번거롭더군요. 그래서 VBA도 C++처럼 .. 2017. 8. 13.
VBA를 이용한 특정 시간 대기 방법 3가지 출처: https://stackoverflow.com/questions/6960434/timing-delays-in-vbahttp://analystcave.com/vba-sleep-vs-wait/ VBA에서 프로그래밍을 하다가 보면 특정 시간을 기다려야 하는 경우가 발생합니다. 이런 경우에 VBA에서는 3가지 방법을 제공합니다. 1. Sleep대기 시간을 밀리초 단위로 제어할 수 있어서 좋으나, Sleep 하는 동안 이벤트 처리를 못해서 Sleep이 길어지면 이벤트를 날리는 경우가 발생합니다. 2. Application.Wait이 방법은 이벤트 처리는 가능하나 대기 시간이 초 단위여서 밀리 초 단위의 세밀한 조작이 필요한 경우에는 사용할 수 없습니다. 3. DoEventsDoEvents를 사용하는 방법은.. 2017. 8. 11.
Application.OnTime으로 서브루틴 호출시 인수 전달 방법 출처: https://stackoverflow.com/questions/31439866/multiple-variable-arguments-to-application-ontime VBA로 프로그램을 짜다보면 특정 시간에 어떤 서브루틴을 불러야 할 경우가 있는데, 서브 루틴을 호출할 때 인수를 넘겨줄 방법을 몰라서 고민하다가 구글링을 해보니 출처에 해결 방법이 나와 있네요. 다음의 간단한 방법으로 인수를 넘겨줄 수 있습니다. Private Sub Caller() Dim i As Integer i = 2 Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _ Procedure:="'Test """ & i & "'", Schedule:=TrueEnd S.. 2017. 8. 8.
멀티 모니터에서 VBA 문자열 찾기 다이얼로그 위치 문제 해결 출처: https://social.msdn.microsoft.com/Forums/office/en-US/b9cd93ee-4673-41bf-9383-a7546b677279/vba-find-dialog-appears-off-screen?forum=accessdev 멀티 모니터 환경에서 주 모니터가 아닌 2번째나 3번째 모니터에 VBA 에디터를 띄워놓고 프로그램을 하다보면 CTRL-F로 찾기를 호출했을 때 문제가 발생합니다. 문제는 찾기 다이얼로그의 위치가 모니터 밖에 생성되거나 모니터 경계에 생성되서 제대로 된 문자열 검색이 되지 않는 것인데요. 해결 방법이 없을까 해서 검색을 해보니, 출처에서는 이런 문제의 원인은 VBA editor가 멀티 모니터 환경을 대비하지 못하고 찾기 다이얼로그의 위치를 주 모니터.. 2017. 8. 2.