티스토리 뷰

토비3에 나오는 단위 Test에 관하여


간단한 VBA를 사용하던 중 애로사항이 발생하여 기록해 본다.

아래 VBA는 고급필터를 쉽게 사용하기 위한 VBA코드이다.


'#######################################################
'Final Release : 2012.12.6
'#######################################################
Sub 통합DB필터()

Dim rows1 As Integer
Dim column1 As Integer
Dim rowscount As Integer
Dim columncount As Integer
Dim fieldcount As Integer
Dim recoardcount As Integer

recoardcount = 0

'Db세팅
Filter기준열 = "A"
db기준열 = "A"
행db필드명 = 1

column1 = 1

DbNameCell = "A6"
FilterNameCell = "B6"

DB_Sheet = Range(DbNameCell).Value
filterSheet = Range(FilterNameCell).Value

Range(DbNameCell).Font.Size = 1

'dbSize 계산
DbSize = Sheets(DB_Sheet).Range(db기준열 & 행db필드명).End(xlToRight).End(xlDown).Address
DbRow = Sheets(DB_Sheet).Range(db기준열 & 행db필드명).End(xlDown).Address
fieldcount = Range(Range(Filter기준열 & "1").Address & ":" & Range(Filter기준열 & "1").End(xlToRight).Address).Count

FilterSize2 = Range(Filter기준열 & "7").End(xlToRight).Address
ColumnSize = Range(Filter기준열 & "1").End(xlToRight).Address


'조건수 column1을 구하는 프로시저
line1:
    For rows1 = Asc(Filter기준열) - 64 To Asc(Filter기준열) - 64 + fieldcount - 1
        Cells(column1 + 1, rows1).Select
        If Cells(column1 + 1, rows1).Value <> "" Then
            rowscount = rowscount + 1
        Else: rowscount = rowscount
        End If
    Next
    
If rowscount > 0 And column1 < 4 Then
    column1 = column1 + 1
    rowscount = 0
    GoTo line1:
    
End If


'내용 지우기
nameOfCopyToRange = Range(Filter기준열 & "7").End(xlToRight).End(xlDown).Address
Sheets(filterSheet).Range("d5").Value = nameOfCopyToRange
Range(Filter기준열 & "8" & ":" & nameOfCopyToRange).Clear

'고급필터
dbrange = db기준열 & 행db필드명 & ":" & DbSize



'CriteriaRange1 구하는 부분
Select Case (fieldcount \ 27)
    Case 0
        CriteriaRange1 = Filter기준열 & "1" & ":" & _
            Chr(Asc(Filter기준열) + fieldcount - 1) & column1
    
    Case 1
        CriteriaRange1 = Filter기준열 & "1" & ":a" & _
            Chr(Asc(Filter기준열) + fieldcount - 27) & column1
    Case 2
        CriteriaRange1 = Filter기준열 & "1" & ":a" & _
            Chr(Asc(Filter기준열) + fieldcount - 53) & column1
    Case 3
        CriteriaRange1 = Filter기준열 & "1" & ":a" & _
            Chr(Asc(Filter기준열) + fieldcount - 89) & column1
            
End Select


'고급필터 부분
Range(CriteriaRange1).Select

Sheets(filterSheet).Range("c5").Value = CriteriaRange1

CopyToRange1 = Filter기준열 & "7" & ":" & FilterSize2
Range(CopyToRange1).Select

Sheets(DB_Sheet).Range(dbrange).AdvancedFilter Action:=xlFilterCopy, _
criteriarange:=Range(CriteriaRange1), _
CopyToRange:=Range(CopyToRange1), _
Unique:=False

Range(Filter기준열 & "1").Select
'Columns(Filter기준열 & ":" & Chr(fieldcount + 64)).EntireColumn.AutoFit
End Sub


위와 같이 통으로 되어있는 Code이다. 점점 편하게 사용하려다 보니 계속 고치게 된다.

이번에 생긴 에러는 DB Size를 구하는 부분에서 에러가 생겼다. 이번에 이 VBA를 이용할 DB는 Data가 1000건 정도 되는 143건만 조회가 되었던 것.


DB Size를 구하는 부분을 Function으로 빼려고 하는데 이 Function이 DB Size를 제대로 Return해줄까 하는 Test이다.

DB Size라 함은 별거 없다. DB의 Column 수와 DB의 Row 수를 정확히 세주기만 하면 된다.

그러면 DB Column 수와 Row수를 따로 따로 구하도록 해야 될 듯 한데. 그러면 Function을 두개 만들어야겠군..




DB나 Web의 내용을 JSP를 이용하여 Excel, PDF 등으로 저장하기


이 세상에 모든 것은 미술품의 재료가 될 수 있듯이 프로그래밍 언어를 이용하면 어떤 기능이던 만들 수 있다고 생각한다.


요즘 하는 것은 내가 항상 만들면서 보람을 느끼는 Business Solution 중에서 Reporting 부분이다. Business Solution에서 Reporting이 빠질 수 없다.


난 현업이 아니고 개발자라 모든 데이터를 웹페이지에서만 보면 될 듯 한데 현업 분들은 Excel이나 PDF로 보는 것을 좋아한다.


항상 엑셀로 업무를 많이 보는 현업들과 달리 아래아 한글도 안깔아 쓰는 나는 굳이 리포팅을 Excel이나 PDF로 해야 할까 하는 생각을 해본다.


아아.. 결정을 해야 하는 분들은 한눈에 들어오는 레포트를 원하기 때문에 그런 걸지도 모르겠다.




암튼 요즘 만드는건 리포트 기능인데 DB에 있는 자료를 Excel이나 PDF로 가져오려고 하니 이건 뭐 프로그래밍이 아니고 그림을 그리는 것 같다.


보통은 엑셀이나 워드에서 키보드나 마우스로 매우 손쉽게 만들 수 있는 문서를 소스코드로 한땀한땀 그려드리는게 요즘 내가 하는 일이다.




현업분들이 사용하시는 페이지는 정적인 페이지 각각 한장일지 모르지만 그렇게 한 분, 열 분, 백 분이 사용하실 리포팅 기능을 오류 없이 최대한 이쁘게 그려드려야 하는 개발자는 또 얼마나 재미가 나는지 현업 분들은 아실라나 모르겠다.




일단 웹은 Java를 많이 쓰므로 Java Library를 이용할 수 있는 JSP로 개발을 많이 한다.


Excel로 뽑아낼 수 있는 기능을 제공하는 Library는 'Apach POI'이고, PDF로 뽑아낼 수 있는 Library는 'iText'다. 이런 Script를 잘 이용 할 수 있으면 현업 분들 업무 하는 시간이 많이 줄어들 것이라 생각한다.


흠.. 나도 언젠가는 현업을 하겠지만 예전에 군대에서 그랬 듯 내가 개발한 프로그램으로 현업 일을 매우 빨리 끝내고 나서 업무시간에 내가 쓸 프로그램을 계속 개발하고 있지 않을까 싶다.








공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함