안녕하세요 :)
VBA 기초 세번째 글이네요 😊
아래 글에서 이어지는 내용이니 참고해주세요 :D
https://kim0404.tistory.com/34
이번 글에서 분석해 볼 코드는
bacoHisNum = setBacodeNum() '바코드 이력 순번
Call setShData("매크로", 3, 1, bacoHisNum)
Call setShBacoHis(bacoHisNum, bacode) '바코드 히스토리 입력
Call setDropDownHis(bacode) '하단 바코드 이력
Call setShData("매크로", 3, 3, "") '오류 초기화
입니다.
위에서부터
1. 바코드 이력 순번 + 1
2. 바코드 이력 순번 A3셀에 입력.
3. 바코드 이력 시트에 데이터 입력.
4. 매크로 시트 최근이력 데이터 입력.
5. 오류 Message 셀 초기화.
순으로 코딩해봤습니다.
■ 1. 바코드 이력 순번 + 1
'바코드 시트에 순번 입력 및 가져오기
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
바코드 이력 순번셀을 만든 이유는 바코드 이력 시트에 행을 추가할때 행의 번호를 쉽게 파악할 수 있도록 하기 위함입니다.
뭐 마지막 행을 찾아 그 다음 행에 데이터가 입력되도록 코드를 짜도 되는데 찾기 귀찮아서 이렇게 만들었어요 ㅎㅎ
`로 표시된건 주석이니 신경쓰지 않아도 됩니다 ㅎㅎ
Num 이라는 변수를 하나 만들어서
getShData("매크로", 3, 1) 아래 그림에 A3에 해당하는 값을 불러와 1 증가 후 증가된 값을 반환하는 함수입니다 :)
위 그림처럼 되어있으면 A3셀에 해당하는 3값을 불러와 +1 된값인 4를 반환하게 되는거죠 ㅎㅎ
■ 2. 바코드 이력 순번 A3셀에 입력
Call setShData("매크로", 3, 1, bacoHisNum)
반환된 값을 bacoHisNum 변수에 넣어놓고 위 그림 A3셀에 증가된 숫자를 입력해줍니다.
이전글에서 설명했던 setShData() 함수를 사용해서 간단하게 셀값을 입력할 수 있죠 ㅎㅎ
■ 3. 바코드 이력 시트에 데이터 입력.
'바코드 이력 남기기
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
이제 이력일 쌓는 함수를 보겠습니다.
setShBacoHis( shNum(바코드 순번), bacode(바코드 ) )를 매개변수로 받고있습니다 :)
바코드 순번에 해당하는 행에 바코드값을 넣어주는 함수입니다
코드를 보면 shNm 변수에 이력을 쌓을 "바코드 이력" 시트를 변수에 담았습니다.
그 밑에는 Call setShData 로 "바코드 이력" 시트에 shNum에 해당하는 행의 B,C,D,F 열에 각각 데이터값을 입력하게끔 되어있습니다 :)
상품명은 나중에 VLOOKUP 함수로 처리하려고 비워두었습니다 ㅎㅎ
더 필요한 정보가 있다면 setShData 를 이용하여 추가로 코딩하면 될것같네요
저는 이 외 필요한 데이터가 없어 간단하게 작성했습니다 :)
마지막행은 Form을 추가하면서 추가된 코드입니다.
나중에 설명드릴께요 ^^
■ 4. 매크로 시트 최근이력 데이터 입력.
' 하단 바코드 이력 쌓기
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
바코드 최근 이력 데이터를 입력하는 함수입니다.
바코드를 최근에 무얼 찍었는지 직관적으로 알 수 있수 있을것 같아 만들어 보았습니다 ㅎㅎ
반복문(for문)을 사용하면 더 깔끔한 코드가 되겠지만 귀찮고 5행밖에 되지않아 그냥 하드코딩했습니다 :)
C열의 8, 9, 10, 11 행을 변수에 담고 입력한 바코드도 1번 변수에 담습니다.
그리고 차례대로 한칸씩 내려오도록 구성되어있습니다 :)
마지막엔 입력한 바코드는 클리어 시켜주면서 입력한 바코드를 직접 삭제하지 않고 편하게 다시 입력할 수 있도록 했습니다 :)
■ 5. 오류 Message 셀 초기화.
Call setShData("매크로", 3, 3, "") '오류 초기화
오류 메세지를 공백으로 초기화 하는 코드입니다.
Run_Event 함수에서 IF 문을 실행하는데 바코드셀에 값이 없으면 "바코드란 값 없음"을 오류 Message 셀 밑에 입력되는데 이를 공백으로 만들어 주는 함수입니다 :)
아래는 Run_Event 에서 바코드값이 없을때 else로 빠지는 구문입니다.
If bacode <> "" Then
...
Else
'이벤트 중지 코드
Application.ScreenUpdating = False
Application.EnableEvents = False
Call setShData("매크로", 3, 3, "바코드란 값 없음") '오류
'이벤트 실행 코드
Application.ScreenUpdating = True
Application.EnableEvents = True
End If
이벤트 중지 코드는 Form을 추가하면서 추가된 코드라 다음글에서 설명드릴수 있을것 같네요 :)
이 글을 여기까지이며 중구난방으로 작성해서 이해가 될지 모르겠네요 ㅎㅎ
다음 글이 바코드 엑셀 마지막 글이 될것 같습니다 :)
여기까지 읽어주셔서 감사합니다.
다음글에서 뵙겠습니다
'IT > 엑섹-자작' 카테고리의 다른 글
엑셀 사용법 : VBA-기초(4) 바코드 등록하는 엑셀 만들기-4 (0) | 2023.09.13 |
---|---|
엑셀 사용법 : VBA-기초(2) 바코드 등록하는 엑셀 만들기-2 (0) | 2023.09.11 |
엑셀 사용법 : VBA-기초(1) 바코드 등록하는 엑셀 만들기-1 (0) | 2023.09.10 |