Excel & VBA---Brain Training
범위를 다루는 Offset,Resize 속성과
Application.OnTime 메소드를 통한 정지시킬때까지 연속실행등의
개념을 숙달 시켜 보자
아래의 코드를 실행하면
Sub makeSquares()
Const X_ As Integer = 13
Const Y_ As Integer = 13
Dim shtX As Worksheet
Dim rCen As Range
Set shtX = Worksheets.Add
Dim iX As Integer, iy As Integer
With shtX
ActiveWindow.DisplayGridlines = False
.Columns.ColumnWidth = 2.5
.Rows.RowHeight = 21
For iX = 1 To X_
For iy = 1 To Y_
With .Range("C3").Resize(X_, Y_)
.BorderAround xlSolid
.Borders(xlInsideHorizontal).LineStyle = xlSolid
.Borders(xlInsideVertical).LineStyle = xlSolid
.Interior.ColorIndex = 15
End With
If iX = Application.RoundUp(X_ / 2, 0) _
And iy = Application.RoundUp(Y_ / 2, 0) Then
Set rCen = .Range("C3").Resize(X_, Y_).Cells(iX, iy)
With .Buttons
.Add _
rCen.Left, rCen.Top, _
rCen.Width, rCen.Height
.Caption = ""
End With
End If
Next
Next
End With
End Sub
아래와 같이 버튼이 하나 만들어지고 테이블이 만들어진다
어떤 결과를 위한 프로시져를 작성하냐 하문...
아래와 같이 버튼을 크릭하면 약1초간격으로 시계방향으로 움직인다
그리고 버튼의 Caption속성의 문자도 화살표가 시계방향으로 나타나게한다
그리고 다시 버튼을 크릭하면 중단한다
다시 버튼을 크릭하기 전까지는 계속 하염없이 이 짓을 하게한다
언젠가 어떻게 중단시키느냐는 질문이 있어서 이런것을 문제로
낸다...외부변수의 적절한 활용!!이 답이다!!
시계방향으로 범위의 4귀탱이를 차례대로 서식하면서 돌아가게 한다
이런 것을 할때
DoEvents라고 하는 것을 꼭 사용해야 한다
그렇지 않으면 생각한대로 되지도 않고
계속 진행되는 상태에서 버튼을 크릭할수도 없고 다른 작업도
할수 없다
DoEvents가 뭐냐 하면
예를 들면 은행창구에 한줄로 주욱 사람들이 줄을 서서 일을볼때
그 줄의 사람들의 일을 모두 처리해야만 다른 작업이 가능해지는 것과같다
그러나
DoEvents를 걸어 놓으면
이 창구의 직원이 한줄로 주욱 서있는 사람들의 일외에도
누구 옆에서 말을 시키면 말도 받아주고 다른 업무도 같이
보아 가면서 진행하게 되는 그런 역할이다
즉 하나의 일(single thread)이 아니고 여러개의 일(multi thread)
을 동시에 하게 하는 것이다
그러니 하나의 에니메이션이 돌아가면서 컴퓨터의 프로세스가
다른 일도 하게 하는 것이다
참고하시고 DoEvents를 빼먹지 않도록 한다
Braintraining_056.