PROGRAMMING WORKSHOP

VSTO|
작업일정관리_6

VSTO라는 제목을 걸고 엑셀프로그래밍을 한다고 의아해 하실 것 같다
VSTO는 별 것이 아니다..
엑셀의 VBA로 작성이 된다면 VisualStudio도구에서 VB에 맞게 정리만 하면 된다
엑셀과 VBA로 하고 있지만
나중에 VSTO를 타겟으로 각자 처리할수 있게 되기를 머리속으로 그리면서
하는 것이다
그러니 좀더 넓은 확장된 포부를 갖고 차근 차근 풀어 나가도록 하자

지난 회까지 3개의 영역, 하나는 테이블 영역,
다른 하나는 타임밴드 영역, 그리고 다른 하나는 챠트를 그리는 영역
3개의 범위를 기준으로 작업이 되었다
이런 기본영역이 되는 것은 항상 외부 변수로 선언하여 항상
접근하여 프로그래밍하기 용이하게 정보를 다른 프로시져들과
공유하려는 개념을 갖는다는 점..상기하시고
또한 작업내용만 모아놓은 개체와 시간에 대한 내용만 담아 놓은 개체
두개의 개체를 각각의 집합체에 모아 놓고 이것도 전역변수에 놓고
사용핟다는 점 또한 관심있게 챙기시고
이렇게 프로젝트가 값나가는 것이 되어 가면 갈수록
복잡한 정보들이 많이 생기게 되고
그러다 보니 정보를 어떻게 하면 체계적으로 관리할 것인가에 대한 연구들을
하게 되는 것이고
그래서 VB.Net이나 Java나 C#이나 모두 정보를 어떻게 관리할 것인가??
라는 점이 약점이 되고 강점이 되고 하는 것이다

이제 또 이미 만들어 놓은 정보집합체 oTimeUnits() 배열을
활용하여 작업비의 변화를 별도의 테이블 영영을 하나 더 만들어서
표현하는 작업을 해보자



열심히 clsTimeUnit개체를 사용한 oTimeUnits()배열을
또 써먹는 다는 점을 아시면 점점, 개체, 집합체의 파워를
느끼게 될 것이고
그런 느낌을 드리기 위하여 씨리즈를 계속 진행하게 되는 것이다
무릅을 치고..아하!! 이래서 ..그랬구나!!라는 그림을
글을 쓰면서 항상 머리속에 그려 본다
한 분이라도 더 흥미로운 곳에 접근하는 것을 꿈꾸면서..

보할테이블의 시작셀을 이미 만들어진 범위 정보에서 찾아내어서

Dim rRateTblStartCell As Range
Set rRateTblStartCell=rChartTbl.Cells(1).Offset(rChartTbl.Rows.Count+1)

그리고 이미 만들어진 oTimeUnits 집합체를 순환하면서
위의 시작점을 기준으로 열방향으로 한셀씩 이동하면서
oTimeUnits속의 값을 읽어서 셀에 써주면 되는 것이고
해당 기간의 금액의 전체 비율은 이미 외부변수에 만들어 놓은 총공사비로
계산하면 되는 것..

그것참..거저 먹는 작업이 되는 것이다

For Each varX In oTimeUnits
     Set oTimeUnit = varX
     ' 현재순환된 구간의 셀을 oTimeUnit개체의 rUnitCell속성에서 읽어서 처리..
     Set rTarget = Intersect(oTimeUnit.rUnitCell.EntireColumn, rRateTblStart.EntireRow)
     With rTarget
          .Value = oTimeUnit.dblAmount
          .Offset(1) = .Value / dblProjectAmount
     End With
Next

***[LOG-IN]***

다음 작업은 위에서 만든 보할테이블을 시각적으로 Gantt챠트와 표현하는
S-Curve 곡선챠트를 도형으로 표현하여 전체 작업의 진척과정이
한눈에 보이게 만드는 것을 하도록 하자
이것도 역시 처음의 개체만들때 노력에 비하여 거저먹기 작업이다
아하..어느 부분에서 용을 써야 하는지!!를 알면 다른 소루션 프로젝트에서도
요령이 생기게 될 것이다

이번 작업도 거저 먹는 작업이다
기초가 충실하면 나머지 일들은 얼마든지 융통성있게 해갈 수 있다는 원리는
프로그래밍에서 뿐만이 아닐 것이다



위의 그림에서 S-Curve Percentage Marking Area(퍼센트표시를 할 범위)를
찾아내는 것은 이미 만들어진 범위..GanttChartArea에서 얻어낼수 있을 것이고
각변곡점의 X값은 각각의 oTimeUnits배열을 순환하면서(혹은 보할테이블의 각셀을 순환)
각 기간브록이 끝나는 셀의 위치가 X값이 될 것이고
Y값은 보할테이블의 누계값이 퍼센트표시범위의 높이와의 비율이 해당 X값부분의 Y값
이 될 것이다
그러니 거저 먹는 것이다
그리고 Line도형을 주욱 이어나가면 된다

오른쪽에는 아래의 그림과 같이 퍼센트눈금 표시의 라인과 텍스트박스를
가볍게 만들어주고



하나, 하나 끼워 맞추어 나가는 것이 즐거운 예술아닌가???
한꺼번에 하려고 하지 말고 , 하나,하나 만들어 끼워나가는
아이들 장난감 조립하듯이..즐기는 것이다

마음에 안들면 바꿔끼고..

S-Curve챠트도 보할테이블의 값을 순환하면서
아래와 같이 몇줄 안되는 코드로 전체 그림이 그럴듯하게 완성되었다

Dim rRate As Range
Dim sngXEnd As Single, sngYEnd As Single
Dim sngYStart As Single
Dim sngXStart As Single
sngYStart = rRateTable.Top
sngXStart = rRateTable.Left
For Each rRate In rRateTable.Rows(2).Cells
    sngXEnd = rRate.Offset(, 1).Left
    sngYEnd = sngYStart - (dblTotalHeight * rRate)
    With shtGantt.Shapes.AddLine(sngXStart, sngYStart, sngXEnd, sngYEnd)
        .Line.Weight = xlThick
        .Line.ForeColor.RGB = RGB(255, 0, 0)
        .Line.Style = msoLineThickBetweenThin
    End With
    sngXStart = sngXEnd
    sngYStart = sngYEnd
Next

이제 전체 작업이 일단락 되었고
이제 다음 쎼션으로 가서는 날자를 하루 단위가 아닌
일주일, 한달 등의 사용자가 지정한 일정의 크기로 조정하는
작업을 해 보도록 하기도 하고
VB.Net의 윈도우폼에서 엑셀을 불러서 일을 시키기도 하면서..해보자
우선 지금까지한 기본을 잘 이해하시는 것이 중요하다
그 이후에는 조금씩 변수를 조정하거나 하는 테크닉을 추가 하면 된다

***[LOG-IN]***