PROGRAMMING WORKSHOP

VSTO|
작업일정관리_8

타임밴드를 사용자가 지정한 기간대로 스케일을 변경했다
이제 간트챠트의 바의 X위치를 타임밴드를 구성하는 clsTimeUnit개체의 배열
을 찾아서 해당작업의 시작날짜와 종료날짜를 비교하여
판단하여 내는 것만 수정하면
그리는 작업은 똑같을 것이다



열하나에 1일씩 된 것은 셀단위로 계산하면 되었지만
1일 이상이 들어갔다면 셀을 토막을 쳐서 해당날짜만큼의
X값의 크기를 결정하게 되겠다
아래의 함수를 수정하여야 겠다
하루가 되던, 몇일이 되던 다 받아주는 것으로 당초에
만들었으면 될 것을 ...
하지만 기본타입이 되어 있으니 조금 수정하면 될 것이다
프로그래밍은 당초에 이것 저것 받아줄수 있게 만들던가
아니면 기본형을 만들어 사용후 상황이 좀더 전개 되면
기본형을 수정하던가
어느 것이 정답이라고 할 필요는 없는 것이다
기본형으로 될 것을 지나친 경우의 수를 모두 고려해도
경우에 따라서는 오버 디자인이 되기도 하는 것이니...
이런 방법이 맞다, 저런 방법이 맞다라고 정하는 것은 별로
좋은 생각이 아니다...상황에 맞추어 융통성있게 만들어 가면
되는 것이다
아래는 해당 작업내용이 들어 있는 개체(clsTask)를 함수에 전달하여
clsTimeUnit배열을 순환하면서 어떤 clsTimeUnit에 걸리는지
찾아내어 X값을 얻어내는 함수 었다

Function getStartXandEndX(oTask As clsTask, lStartX As Long, lEndX As Long)
Dim varX As Variant
Dim oTimeUnit As clsTimeUnit
For Each varX In oTimeUnits
    Set oTimeUnit = varX
    If oTimeUnit.datStart = oTask.START_DATE Then
        lStartX = oTimeUnit.rUnitCell.Left
    End If
    If oTimeUnit.datEnd = oTask.END_DATE Then
        lEndX = oTimeUnit.rUnitCell.Left + oTimeUnit.rUnitCell.Width
        Exit Function
    End If
Next
End Function

위의 내용을 어떻게 고칠까..
아래와 같이 고치고 실행하여 보시기 바란다
변수몇개 추가하고 아하..작은 순환을 한번 더하면 되는구나..
고것참...이것이 프로그래밍의 재미다
마음대로 늘었다, 쭐었다 한다

Function getStartXandEndX(oTask As clsTask, lStartX As Long, lEndX As Long)
Dim varX As Variant
Dim lDate As Long
Dim iPart As Integer

Dim oTimeUnit As clsTimeUnit
For Each varX In oTimeUnits
    Set oTimeUnit = varX
    iPart = 0
    For lDate = oTimeUnit.datStart To oTimeUnit.datEnd
        If oTask.START_DATE = lDate Then
            lStartX = oTimeUnit.rUnitCell.Left + (oTimeUnit.rUnitCell.Width / iDaysInUnit) * iPart
        End If
        If oTask.END_DATE = lDate Then
            lEndX = oTimeUnit.rUnitCell.Left + (oTimeUnit.rUnitCell.Width / iDaysInUnit) * (iPart + 1)
        End If
        iPart = iPart + 1
    Next
Next
End Function

쥐뿔도 골치아플 것이 없다
기본형만 되어있다면..약간만 곰곰히 생각하고
결국은 정보를 좀더 토막을 치는 것이니
필연적으로 변수를 몇개 생각해 보고..
토막 친 것 만큼 순환을 하고..

기본형에 변화를 약간씩 주면서
아래와 같이 년도,분기,월,주간,일자별을 모두 표현해 보자



1일씩 단위로 타임테이블을 끊는 것이 아닌
3일, 5일등 임의의 날짜로 끊어서 표현하는 부분에서
보할값에 약간의 차이가 있게 나왔다
관심을 갖고 실행해 보시고 스스로 수정해 보시면 더욱 좋고
이부분은 다음 화일에서 수정하도록 하자

***[LOG-IN]***