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

Excel & VBA---Brain Training




잭바우어의 24씨리즈중에서 못보았던것을 구하여 ..@#!
이눔의 것에 심취하느라고 할일을 못했다..에!@#이..@!#$
할 일을 못한것 중의 하나가 이 페이지작성이였다..반성하고..다시..

도형오브젝트중의 편리한 메소드중의 하나는 IncrementLeft와 IncrementTop이다
아주 유용한다
만약 도형을 오른쪽으로 10을 옮긴다고 하면
그냥 Shape.IncrementLeft 10 을 하면 된다
만약 없다면
Shape.Left=Shape.Left+10 으로 하여야 할것이다
이전 위치를 읽고 그 위치에 10을 더하는 번거로움이 생략될수 있다
현재 위치가 어디던 상관없이
IncrementLeft는 현재 있는자리에서 10이 옮겨진다
도형을 움직이는 에니메이션을 하는데 아주 유용하다
회전시키는 것도 마찬가지다
IncrementRotation 10 하면 360 도중에서 10도가 움직이는 것이다
그러지 못하만 한참 계산질을 해대야 한다
아래의 구문을 실행시켜보시면

Sub moveShape() Dim shpX As Shape Dim iX As Integer Dim lX As Long Dim iZ As Integer Set shpX = Worksheets.Add.Shapes.AddShape(msoShapeRectangle, _ 60, 60, 15, 15) shpX.Line.Weight = xlThick shpX.Fill.ForeColor.RGB = RGB(255, 0, 0) iZ = 15 For iX = 1 To 500 If iX Mod 20 = 0 Then iZ = iZ * -1 End If shpX.IncrementLeft iZ For lX = 1 To 30000 DoEvents Next Next End Sub

위의 구문중 아래의 것은

For lX=1 To 30000
DoEvents
Next

속도를 조정하기 위한 구문이였다
이럴때 API함수 하나 정도 응용하면 시간조절을 마음대로 쉽게
할수 있게 된다
API함수는 이럴때 가끔사용하여야지 뻑하면 API함수같은 것을 사용하려고
하면 버그나 효율이 떨어짐을 불러 일으킨다
잘 알고 잘 활용하면 된다
아래의 화일에서는 수평방향을 이동하면서 회전도 하면서 왔다..갔다 해보자
API 함수를 사용하여 좀더 부드럽게 시간조절을 한다


BrainTraining_066_5.



위의 구문과 비교하면 엄청 부드럽게 움직임을 알 수 있다


아래의 구문을 실행하면

Set shtX = Worksheets.Add ActiveWindow.DisplayGridlines = False For iX = 1 To 12 Set shpX = shtX.Shapes.AddShape(msoShapeRectangle, _ 60 + 30 * iX, 150, 15, 15) shpX.Name = "shp_" & iX shpX.Line.Weight = xlThick shpX.Fill.ForeColor.RGB = RGB(255, 0, 0) Next

12개의 사각형이 일렬로 만들어진다
이제 이것을 3개씩 그룹을 지어서 위아래로 부드럽게 움직이게 해보자
도형하나가 아니고 3개씩 그룹을 지어서 4개의 그룹이 상하움직임을 하는 것이다



Shape오브젝트가 아닌
ShapeRange오브젝트라고 하는 것을 알고 활용하기 위한 연습이다

아래와 같이 Range속성은 셀에만 있는 것이 아니고 도형에도 있다
Range라고하는 것의 의미자체가 어디서 부터 어디까지이니..
도형A에서 부터 도형F까지의 모든 도형을 한꺼번에 묶으면 된다

Dim oShapeRange As ShapeRange
Set oShapeRange=Shapes.Range(Array("도형1","도형2","도형3"))

ShapeRange오브젝트는 Shapes오브젝트의 Range메소드로 얻게 되는 것이다
요렇게 ShapeRange오브젝트에 묶으면
ShapeRange오브젝트를 하나의 도형으로 생각하면 되는 것!!
Array() ,배열관련 함수가 나타나니까..멈칫하면서 숨고르기에 들어간다면
아직은 프로그래밍이 낯섫은 상태다
배열은 필수적으로 자유스럽게 활용하여야 이곳..저곳에서 유용하게
써먹는다..
배열을 만나면 반갑고..문제를 풀때 배열이 먼저 생각난다면 굿이다
Shapes오브젝트의 Range메소드는 배열을 매개변수로 받는 것이다
한꺼번에 처리하고자 하는 도형들의 이름을 배열화시키서 전달하면 되는것이고
배열화를 시켜주는 함수 Array()함수를 사용하면 되는 것이다



BrainTraining_066_6.