PROGRAMMING WORKSHOP

자재관리 | DashBoard

STEP_6 ---------------------------------

수식으로 원본과 연결되었던 내용을 수식을 모두 걷어내고
VBA로 처리하는 것으로 바꾸고 있다
3개의 테이블중에서 2개는 행머리가 하나의 조건인것이라서 별문제가 아니었으나
마지막 1개의 테이블은 아래의 그림과 같이 행머리조건이 두개이다



별 문제는 없지만
대개가 이렇게 조건이 더 늘어나면 귀찮아진다..

더불어 각각의 테이블로 이동할때마다 데이타를 갱신하는 것은
바보같은 짓이다
필요할때만,쏘스정보가 바뀌었을때만 갱신을 할 필요가 있을것이다
그래서 이것을 컨트롤하기 위하여 체크박스콘트롤을 하나 달고


이것을 체크하였을때만 정보를 새로 갱신하고 그렇지않으면
그냥 테이블의 위치만 이동하는 것으로 하는 것이 좋을 것이다

If Not Sheet3.chkRefresh.Value Then
   테이블위치만 이동하고...Exit Sub
Else
   '테이블 새로 갱신하기
End If

행머리 조건이 두개이던 세개이던
조건 검문만 원하는 횟수만큼 해주면 되는 것

여러개의 기능을 만들때 하나,하나 확인 하면서 만드는 것이 좋다
아래의 그림과 같이 워크시트함수를 사용한 수식의 결과와



VBA에서 만든 계산결과를 순환하면서 비교하여 확인후 완전하다고 생각하면
다음 단계의 작업으로 가는 것이 순서이다
이것,저것 짬뽕으로 생각하면 정신사나운 코딩이 된다
메시지박스는 좋은 디버깅툴중의 하나이니 개발중에 많이 활용하는 것이 좋다

페이지_3버튼(sPage변수)을 크릭할때 아래와 같다

Select Case sPage
    Case "Page_1"
		....
		....
    Case "Page_2", "Page_4"
        ....
    Case "Page_3"
        Set rCodeRange = getSource(Worksheets("코드"), "현장명|담당자")
        Dim sOld As String
        Dim dblTempTtl1 As Double, dblTempTtl2 As Double
        Dim dblTempGTtl1 As Double, dblTempGTtl2 As Double
        
		With rTableStartCell
			For Each rX In rCodeRange.Rows
				'별도 함수로 쏘스테이블에서 계약금액 계산해 오기
                dblTemp1 = getSubTotalForFieldAndStaff(rX.Cells(1), rX.Cells(2), "계약금액", rSrcTbl)
				'별도 함수로 쏘스테이블에서 집행금액 계산해 오기
                dblTemp2 = getSubTotalForFieldAndStaff(rX.Cells(1), rX.Cells(2), "집행금액", rSrcTbl)
                If sOld <> rX.Cells(1) Then
                    .Offset(iRow).Select
                     MsgBox dblTempTtl1 & "   " & dblTempTtl2 & "   " & dblTempTtl1 - dblTempTtl2 & " " & Format((dblTempTtl1 - dblTempTtl2) / dblTempTtl1, "0.00%")
                    dblTempTtl1 = 0
                    dblTempTtl2 = 0
                    iRow = iRow + 1
                    .Offset(iRow).Select
                    sOld = rX.Cells(1)
                Else
                    .Offset(iRow).Select
                End If
                MsgBox dblTemp1 & "   " & dblTemp2 & "   " & dblTemp1 - dblTemp2 & " " & Format((dblTemp1 - dblTemp2) / dblTemp1, "0.00%")
                dblTempTtl1 = dblTempTtl1 + dblTemp1
                dblTempTtl2 = dblTempTtl2 + dblTemp2
                dblTempGTtl1 = dblTempGTtl1 + dblTemp1'현장별합계
                dblTempGTtl2 = dblTempGTtl2 + dblTemp2 '총계
                iRow = iRow + 1 '행이동 변수
            Next
            .Offset(iRow).Select'시각적으로 현재 실행중 행을 확인하기 위하여
            
            MsgBox dblTempTtl1 & "   " & dblTempTtl2 & "   " & dblTempTtl1 - dblTempTtl2 & " " & Format((dblTempTtl1 - dblTempTtl2) / dblTempTtl1, "0.00%")
            iRow = iRow + 1
            .Offset(iRow).Select
            MsgBox dblTempGTtl1 & "   " & dblTempGTtl2 & "   " & dblTempGTtl1 - dblTempGTtl2 & " " & Format((dblTempGTtl1 - dblTempGTtl2) / dblTempGTtl1, "0.00%")
        End With

        
End Select
***[LOG-IN]***

STEP_7 ---------------------------------

위에서 값을 확인하였으면 이것을 테이블을 잘 그려 넣으면 된다
이렇게 하면 수식은 모두 걷어내고 필요할때만 대시보드테이블의 내용을 갱신하여
볼수 있게 되니까, 화일이 가벼워진다

테이블을 만드는데 각각의 행을 처리하는데 있어서
중간합계행,일반값행,총합계행,제목행등이 있고
이런 경우의 수마다 같은 코딩을 반복하게 되는 경우가 많다
이럴때는 별도의 행처리 프로시져를 별도로 만들어서
호출하여 사용하는 것이 좋은 방법이다
위의 내용을 테이블에 작성하고 테이블을 서식하고 하는 것이 아래의
화일에 정리 되었고, 수식을 모두 제거한 셈이 된다

***[LOG-IN]***