반응형
반응형

안녕하세요 :)

이전 글 엑셀 사용법 : VBA-기초(1) 바코드 등록하는 엑셀 만들기-1에서 이어지는 글입니다 :D

 

 

아래는 제가 작성한 코드입니다 ㅎㅎ..

이글을 보는 코딩 고수님들은 뒤로가기를 눌러주세요 ㅜㅜ..

허접하지만 설명하겠습니다 ...

 


■ 코드

Sub 단추1_Click()

    '셀 클릭 잠시 막아 놓음.
    Call Run_Event

End Sub



' 실행 함수
Sub Run_Event()

    Dim dumy

    Dim bacode As String '바코드 변수
    Dim bacoHisNum As Integer '바코드 순번 변수

    
    bacode = getShData("매크로", 7, "C")
    
    
    If bacode <> "" Then
    
        
        bacoHisNum = setBacodeNum() '바코드 이력 순번
        
        
        Call setShData("매크로", 3, 1, bacoHisNum) '삭제
        
        Call setShBacoHis(bacoHisNum, bacode) '바코드 히스토리 입력
    
        Call setDropDownHis(bacode) '하단 바코드 이력
    
    
        Call setShData("매크로", 3, 3, "") '오류 초기화
    
    Else
        
        '이벤트 중지 코드
        Application.ScreenUpdating = False
        Application.EnableEvents = False
    
        Call setShData("매크로", 3, 3, "바코드란 값 없음") '오류
    
    
        '이벤트 실행 코드
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        
    
    End If


End Sub


'******************************사용자 정의함수 Start *******************************

'바코드 시트에 순번 입력 및 가져오기
Function setBacodeNum()
    Dim Num
    
    'Num = getShData("바코드 이력", 1, 1)
    'Num = Num + 1
    
    'Worksheets("바코드 이력").Cells(1, 1) = Num
    
    
    
    Num = getShData("매크로", 3, 1)
    Num = Num + 1
    
    Worksheets("매크로").Cells(3, 1) = Num
    
    setBacodeNum = Num
End Function


'바코드 이력 남기기
Function setShBacoHis(shNum, bacode)

    Dim shNm
    
    shNm = "바코드 이력"


    Call setShData(shNm, shNum, "B", "N") '삭제여부
    Call setShData(shNm, shNum, "C", shNum - 2) '순번
    Call setShData(shNm, shNum, "D", bacode) '바코드
    'Call setShData(shNm, shNum, "E", bacode) '상품명은 vloopup으로 처리
    Call setShData(shNm, shNum, "F", Now) '바코드
    
    'Application.Goto reference:=[A&shNum], Scroll:=True
    
    'Application.Goto reference:=Worksheets("바코드 이력).Range("G10"), Scroll:=True
    
    
        Application.Goto Reference:=Worksheets(shNm).Range("A" & shNum), Scroll:=False
    
End Function


' 하단 바코드 이력 쌓기
Function setDropDownHis(bacode)

    Dim shNm, bcData1, bcData2, bcData3, bcData4, bcData5
    shNm = "매크로"

    bcData1 = bacode
    bcData2 = getShData(shNm, 8, "C")
    bcData3 = getShData(shNm, 9, "C")
    bcData4 = getShData(shNm, 10, "C")
    bcData5 = getShData(shNm, 11, "C")

    Call setShData(shNm, 8, "C", bcData1) '1행
    Call setShData(shNm, 9, "C", bcData2) '2행
    Call setShData(shNm, 10, "C", bcData3) '3행
    Call setShData(shNm, 11, "C", bcData4) '4행
    Call setShData(shNm, 12, "C", bcData5) '5행
    
    
    Call setShData(shNm, 7, "C", "") '바코드 값 초기화

End Function


'******************************사용자 정의함수 End *******************************

'-------------------------공통 함수 Start ---------------------------------------

'시트명, 행, 열 값 가져오기
Function getShData(sheetName, Row, Col)

    Dim shData

    shData = Worksheets(sheetName).Cells(Row, Col).Value
    
    getShData = shData
End Function


'시트명, 행, 열 입력값
Sub setShData(bacoShNm, Row, Col, shData)

    Worksheets(bacoShNm).Cells(Row, Col) = shData

End Sub

 

 

 

 

하나하나 뜯어볼께요 :)

먼저 공통함수 부터 보겠습니다.

 

 

■ 공통함수

'-------------------------공통 함수 Start ---------------------------------------

'시트명, 행, 열 값 가져오기
Function getShData(sheetName, Row, Col)

    Dim shData

    shData = Worksheets(sheetName).Cells(Row, Col).Value
    
    getShData = shData
End Function


'시트명, 행, 열 입력값
Sub setShData(bacoShNm, Row, Col, shData)

    Worksheets(bacoShNm).Cells(Row, Col) = shData

End Sub

 

공통함수를 왜 만드는 이유는 그냥 제가 편하게 사용하기 위해서 만들었습니다 ㅎㅎ

setShData() 함수는 한줄로 구성되어 있지만

getShData() 함수는 세줄로 되어있어서 간단하게 사용하려고 만들었습니다.

그리고 매번 길다란 문구를 입력할 필요도 없어서 이런식으로 만들면 좋아요

 

대강 코드에 대해 설명하면

setShData()는 매개변수 bacdShNm, Row, Col, shData를 받는다고 나와있습니다.

setShData("매크로", 1, 1, "A1 데이터 입력")로 간단하게 매크로시트 1행, 1열에 "A1 데이터 입력" 이라는 값을 넣을 수 있습니다.

 

getShData()는 매개변수 bacdShNm, Row, Col를 받는데요

이는 getShData("매크로", 1, 1)로 간단하게 위에서 set 했던 "A1 데이터 입력" 값을 가져올 수 있습니다.

 

 

■ 단추1_Click()

Sub 단추1_Click()

    '셀 클릭 잠시 막아 놓음.
    Call Run_Event

End Sub

 

단추1_Click() 함수는 확인 버튼을 누를때 실행됩니다.

아래 Call Run_Event 를 호출하는걸 볼 수 있습니다.

함수를 찢어놓는건 재활용하기 좋기 때문입니다. ㅎㅎ

 

 

 

■ Run_Event()

' 실행 함수
Sub Run_Event()

    Dim dumy

    Dim bacode As String '바코드 변수
    Dim bacoHisNum As Integer '바코드 순번 변수

    
    bacode = getShData("매크로", 7, "C")
    
    
    If bacode <> "" Then
    
        
        bacoHisNum = setBacodeNum() '바코드 이력 순번
        
        
        Call setShData("매크로", 3, 1, bacoHisNum) '삭제
        
        Call setShBacoHis(bacoHisNum, bacode) '바코드 히스토리 입력
    
        Call setDropDownHis(bacode) '하단 바코드 이력
    
    
        Call setShData("매크로", 3, 3, "") '오류 초기화
    
    Else
        
        '이벤트 중지 코드
        Application.ScreenUpdating = False
        Application.EnableEvents = False
    
        Call setShData("매크로", 3, 3, "바코드란 값 없음") '오류
    
    
        '이벤트 실행 코드
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        
    
    End If


End Sub

 

 

핵심이 되는 함수죠.

 

매크로 시트의 C7 데이터를 읽어와 바코드 이력 시트에 입력하는 코드입니다.

 

C7의 값이 존재할때 ( 바코드값 <> "")

 

    1. 바코드 이력 순번 + 1

    2. 바코드 이력 순번 A3셀에 입력.

    3. 바코드 이력 시트에 데이터 입력.

    4. 매크로 시트 최근이력 데이터 입력.

    5. 오류 Message 셀 초기화.

 

순으로 되어있습니다.

메인이 되는 함수는 간결하게 작성하는게 유지보수에 좋은것 같아요ㅎㅎ

흐름을 먼저 파악해야 어디서 부터 어떻게 무엇이 잘못되었거나 내가 수정하고 싶은 기능이 어디에 있는지 빠르게  파악하기 쉬운것 같습니다.

 

오늘은 여기까지 하고 다음글에 1~5까지의 함수를 분석해보도록 할께요 :)

 

감사합니다.

반응형

+ Recent posts