Sleep(x)

 

시간 지연은 반복문 실행시 너무 빠르게 지나가 진행 과정을 볼 수 없거나,

엑셀을 통한 시각적 효과(게임 등)를 만들 때 사용합니다.

 

여러가지 방법이 있지만 필자는 가장 편한 Sleep(x) 함수를 사용합니다. (x는 1000분의 1초)

 

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Macro()
      For i=5 To 0 Step -1
            Cells(1,1).value = i
            Sleep(1000)
      Next i
End Sub

위의 예제는 3초의 시간을 재는 매크로입니다.

 

첫번째 줄의 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 은 Sleep함수를 쓰기위해 필요한 코드입니다.

 

Sleep()함수는 Cells()나 Range()같은 vba의 기본 내장함수가 아닙니다.

 

따라서 내가 Sleep함수를 쓰겠다~ 하고 선언을 해 주어야 쓸 수 있습니다. 

 

구체적으로는 살펴보면 "kernel32"라는 라이브러리(Lib)에서 Sleep이라는 함수를 Private형식(다른 모듈에서는 사용할 수 없는 선언방법)으로 선언한다는 것입니다. ByVal dwMilliseconds As Long은 Sleep함수를 쓰기 위해 넘겨주어야 하는 dwMilliseconds라는 이름의 인자입니다. 위의 코드에서는 1000이 됩니다.

 

일반적인 사무용도의 엑셀 매크로를 만들겠다고 하시는 분들은 Sleep함수가 그닥 필요가 없을 수 있습니다.

하지만 엑셀 매크로로 사무용도 이외의 알고리즘 구현 연습을 할 때에는 알고리즘의 작동 과정을 눈으로 볼 수 있고, 간단한 미니게임을 만들 때에는 게임화면에 시각적 효과를 줄 수 있습니다.

 

아래에는 필자가 만든 미로만들기 알고리즘에서 미로가 만들어지는 과정을 자세히 보기위해 Sleep함수를 사용한 예입니다.

Sleep함수를 쓰지 않았을 때

Sleep함수를 쓰지 않아 컴퓨터의 빠른 연산속도 때문에 미로가 만들어지는 과정을 볼 수가 없습니다.

Sleep함수를 썼을 때

하지만 Sleep함수를 쓴다면 미로가 만들어지는 과정을 볼 수 있어서 알고리즘에 오류가 있을 경우 찾기 쉽습니다.

 

이것으로 엑셀 vba시간지연(딜레이)넣는 법을 마치겠습니다.


WRITTEN BY
컴공학도

,