오늘은 엑셀(EXCEL) VBA(Visual Basic Application) 사용자 양식(User Form)을 작성하고 QR코드를 읽어 특정 구분자가 포함된 QR코드 문자 중 사용자가 필요한 일부 문자만 텍스트박스(TEXTBOX)에 각각 입력되도록 해보겠습니다. 아래 QR코드는 당사의 일부 제품에 사용되는 QR코드로 이 QR코드는 제품의 모델, 로트, ERP 번호와 ERP 일련번호 정보를 가지고 있습니다. 오늘은 엑셀(EXCEL) VBA(Visual Basic Application) 사용자 양식(User Form)을 작성하고 QR코드를 읽어 특정 구분자가 포함된 QR코드 문자 중 사용자가 필요한 일부 문자만 텍스트박스(TEXTBOX)에 각각 입력되도록 해보겠습니다. 아래 QR코드는 당사의 일부 제품에 사용되는 QR코드로 이 QR코드는 제품의 모델, 로트, ERP 번호와 ERP 일련번호 정보를 가지고 있습니다.
위의 QR코드를 바코드 판독기로 읽으면 CV11200225(GC)/ACS 10X50N106KNLA(GC)/202301190149/PAP1219AP23A19CJ-XU 라는 연속된 문자가 나옵니다. 앞에 있는 CV11200225(GC) : ERP에 있는 내부 코드로 의미가 없으며, ACS 10X50N106 KNLA(GC) : 모델명이며, 202301190149 : ERP의 시리얼 번호이며, PAP1219AP23A19CJ-XU : 로트 번호입니다. 또 구분 문자는 ‘/’라고 하는 것입니다. 모델, 로트 정보만 골라서 TEXTBOX에 각각 입력하도록 하겠습니다. 매크로 파일 생성 위의 QR코드를 바코드 판독기로 읽으면 CV11200225(GC)/ACS 10X50N106KNLA(GC)/202301190149/PAP1219AP23A19CJ-XU 라는 연속된 문자가 나옵니다. 앞에 있는 CV11200225(GC) : ERP에 있는 내부 코드로 의미가 없으며, ACS 10X50N106 KNLA(GC) : 모델명이며, 202301190149 : ERP의 시리얼 번호이며, PAP1219AP23A19CJ-XU : 로트 번호입니다. 또 구분 문자는 ‘/’라고 하는 것입니다. 모델, 로트 정보만 골라서 TEXTBOX에 각각 입력하도록 하겠습니다. 매크로 파일 생성
1. 다른 이름으로 저장(단축키(F12))을 누르면 다른 이름으로 저장이 팝업 됩니다. 2. 팝업된 창에서 저장 위치를 정하고 파일명을 입력하여 파일 형식을 Excel 매크로 사용 통합 문서(*.xlsm)를 선택한 후 확인을 눌러주세요. 1. 다른 이름으로 저장(단축키(F12))을 누르면 다른 이름으로 저장이 팝업 됩니다. 2. 팝업된 창에서 저장 위치를 정하고 파일명을 입력하여 파일 형식을 Excel 매크로 사용 통합 문서(*.xlsm)를 선택한 후 확인을 눌러주세요.
3.엑셀 상단에 내가 만든 이름의 QR_문자 슬라이싱.xlsm으로 표시됩니다. 3.엑셀 상단에 내가 만든 이름의 QR_문자 슬라이싱.xlsm으로 표시됩니다.
사용자 폼(User Form) 만들기 사용자 폼(User Form) 만들기
1.바로가기 키 ALT+F11을 동시에 눌러 Microsoft Visual Basic for Application 창이 팝업되도록 합니다. 1.바로가기 키 ALT+F11을 동시에 눌러 Microsoft Visual Basic for Application 창이 팝업되도록 합니다.
2. 삽입 => 사용자 정의 양식을 눌러 사용자 양식을 추가합니다. 2. 삽입 => 사용자 정의 양식을 눌러 사용자 양식을 추가합니다.
버튼을 누르면 ①폼 폴더에 User Form1이 형성되고 ②오른쪽에 폼이 하나 생성됩니다. 버튼을 누르면 ①폼 폴더에 User Form1이 형성되고 ②오른쪽에 폼이 하나 생성됩니다.
3. 툴박스를 검색하고 툴 중에서 위에서 세 번째에 위치한 텍스트박스를 클릭하여 사용자 양식에 자유롭게 박스를 3개 만들어주시기 바랍니다. (1회 클릭당 1회씩 작성됩니다.) 3. 툴박스를 검색하고 툴 중에서 위에서 세 번째에 위치한 텍스트박스를 클릭하여 사용자 양식에 자유롭게 박스를 3개 만들어주시기 바랍니다. (1회 클릭당 1회씩 작성됩니다.)
4. TEXTBOX를 클릭하여 오른쪽 버튼을 눌러 속성을 확인하다 4. TEXTBOX를 클릭하여 오른쪽 버튼을 눌러 속성을 확인하다
5. 속성창에 (소위), Autosize, AutoTab… 등 다양한 정보가 나오는 것을 볼 수 있습니다. 제가 처음으로 만든 텍스트 상자의 이름은 Textbox1 이네요. 개체의 이름을 확인하는 것은 중요합니다. 지금처럼 단순한 양식으로는 문제가 되지 않지만 양식의 개체 등이 많아지면 나름대로 혼동해 버릴 수도 있습니다. 5. 속성창에 (소위), Autosize, AutoTab… 등 다양한 정보가 나오는 것을 볼 수 있습니다. 제가 처음으로 만든 텍스트 상자의 이름은 Textbox1 이네요. 개체의 이름을 확인하는 것은 중요합니다. 지금처럼 단순한 양식으로는 문제가 되지 않지만 양식의 개체 등이 많아지면 나름대로 혼동해 버릴 수도 있습니다.
버튼을 만들어 사용자 양식 표시(사용자 양식 표시, show()) 버튼을 만들어 사용자 양식 표시(사용자 양식 표시, show())
0. 혹시 개발도구가 없으신 분들은 아래 링크를 클릭하셔서 만들어주세요~ https://blog.naver.com/pkj4601/222893329412 0. 혹시 개발도구가 없으신 분들은 아래 링크를 클릭해서 만들어주세요~ https://blog.naver.com/pkj4601/222893329412
부장이 알려주는 EXCEL VBA(1) 엑셀 개발툴, Hello World!!! #EXCEL #VBA #컴파일1급 #엑셀개발툴엑셀을 사용하다보면 언젠가는 VBA를 접하게 되는 날이 옵니다… blog.naver.com 부장이 알려주는 EXCEL VBA(1) 엑셀 개발툴, Hello World!!! #EXCEL #VBA #컴파일1급 #엑셀개발툴엑셀을 사용하다보면 언젠가는 VBA를 접하게 되는 날이 옵니다… blog.naver.com
1. 엑셀시트로 돌아가서 개발도구 =>삽입=>버튼(양식컨트롤)을 눌러 적당한 크기의 버튼을 만듭니다. 1. 엑셀시트로 돌아가서 개발도구 =>삽입=>버튼(양식컨트롤)을 눌러 적당한 크기의 버튼을 만듭니다.
2.버튼을 생성하면 매크로 지정이 팝업 됩니다. 이때 취소 버튼을 누릅니다. 2.버튼을 생성하면 매크로 지정이 팝업 됩니다. 이때 취소 버튼을 누릅니다.
3. 엑셀시트에 만들어놓은 버튼1을 클릭하고 개발도구=>코드표시를 클릭합니다. 3. 엑셀시트에 만들어놓은 버튼1을 클릭하고 개발도구=>코드표시를 클릭합니다.
4. 그러면 아래와 같이 코딩창이 나타납니다. 여기서 사용자 양식 1을 내도록 하는 명령어를 사용하면 됩니다. User Form 1. Show 라고 쓰시면 됩니다. 소문자로 써도 VBA가 자동으로 수정해 줍니다 4. 그러면 아래와 같이 코딩창이 나타납니다. 여기서 사용자 양식 1을 내도록 하는 명령어를 사용하면 됩니다. User Form 1. Show 라고 쓰시면 됩니다. 소문자로 써도 VBA가 자동으로 수정해 줍니다
5. 시트로 돌아가서 버튼 1을 클릭하면 작성한 사용자 양식 1이 팝업 됩니다. 신기하죠? 사용자 폼을 닫을 때는 X를 눌러주세요. 5. 시트로 돌아가서 버튼 1을 클릭하면 작성한 사용자 양식 1이 팝업 됩니다. 신기하죠? 사용자 폼을 닫을 때는 X를 눌러주세요.
바코드 리더기에서 QR코드를 판독한 후 모델과 로트 텍스트를 분리한다 바코드 리더기에서 QR코드를 판독한 후 모델과 로트 텍스트를 분리한다
1. ALT + F11을 눌러 VBA로 진입합니다. 1. ALT + F11을 눌러 VBA로 진입합니다.
2. User Form1에서 QR코드를 가져올 1번 텍스트 상자를 클릭하고 오른쪽 버튼을 눌러 코드 표시를 선택합니다. 2. User Form1에서 QR코드를 가져올 1번 텍스트 상자를 클릭하고 오른쪽 버튼을 눌러 코드 표시를 선택합니다.
3. 그러면 코드창이 보이는데요 아래와 같이 자동으로 쓰여집니다. 이 의미는 텍스트 상자 1의 문자가 변화할 때 실행하는 프로시저라는 뜻입니다. 3. 그러면 코드창이 보이는데요 아래와 같이 자동으로 쓰여집니다. 이 의미는 텍스트 상자 1의 문자가 변화할 때 실행하는 프로시저라는 뜻입니다.
4. 코딩을 해볼까요? 4. 코딩을 해볼까요?
프라이빗 서브 Text Box1_Change() 시작점 = Val(InStr(1, TextBox1) です. 텍스트, “/”) + 1If Len(TextBox1) です. 텍스트) <= 43차에 Font Size = 0 Else FontSize = Val(InStr(시작점, TextBox1)을 입력합니다. 텍스트, “/”) – 시작점 End If revpoint = Len(TextBox1) 입니다. 텍스트) Val(InStrRev(TextBox1)입니다. 텍스트입니다(“/”)) 텍스트박스2입니다. 텍스트 = Mid (TextBox1) 입니다. 텍스트, 시작점, 글꼴 크기) ‘모델 정보 TextBox3입니다. 텍스트 = 오른쪽 (TextBox1) 입니다. 텍스트, revpoint) ‘로트 정보 종료 서브입니다 프라이빗 서브 Text Box1_Change() 시작점 = Val(InStr(1, TextBox1) です. 텍스트, “/”) + 1If Len(TextBox1) です. 텍스트) <= 43차에 Font Size = 0 Else FontSize = Val(InStr(시작점, TextBox1)을 입력합니다. 텍스트, “/”) – 시작점 End If revpoint = Len(TextBox1) 입니다. 텍스트) Val(InStrRev(TextBox1)입니다. 텍스트입니다(“/”)) 텍스트박스2입니다. 텍스트 = Mid (TextBox1) 입니다. 텍스트, 시작점, 글꼴 크기) ‘모델 정보 TextBox3입니다. 텍스트 = 오른쪽 (TextBox1) 입니다. 텍스트, revpoint) ‘로트 정보 종료 서브입니다
텍스트 상자 2. 텍스트 = Mid (TextBox1). 텍스트, 시작점, 글꼴 크기) 텍스트 상자 3. 텍스트 = 右 (TextBox1). 텍스트, revpoint) 텍스트 상자 2. 텍스트 = Mid (TextBox1). 텍스트, 시작점, 글꼴 크기) 텍스트 상자 3. 텍스트 = 右 (TextBox1). 텍스트, revpoint)
그런데 첫 번째 구분자의 위치가 어디인지 알아야 하기 때문에 그것을 startpoint라는 변수에 넣었고, 그 이후에 몇 글자를 불러올지는 Fontsize라는 함수에 넣은 것입니다. startpoint 변수는 첫 번째 구분 문자(“/”)를 찾기 위해 Instr함수와 그 값을 숫자형으로 변환하기 위해 Val함수를 사용한 것입니다. 그런데 첫 번째 구분자의 위치가 어디인지 알아야 하기 때문에 그것을 startpoint라는 변수에 넣었고, 그 이후에 몇 글자를 불러올지는 Fontsize라는 함수에 넣은 것입니다. startpoint 변수는 첫 번째 구분 문자(“/”)를 찾기 위해 Instr함수와 그 값을 숫자형으로 변환하기 위해 Val함수를 사용한 것입니다.
startpoint = Val(InStr(1, TextBox1). 텍스트, “/”) + 1 startpoint = Val(InStr(1, TextBox1). 텍스트, “/”)+1
몇 글자를 가져올지를 나타내는 fontsize는 다음 구분자 위치에서 첫 구분자 위치를 뺀 값이면 되기 때문에 이렇게 코딩을 했습니다. 몇 글자를 가져올지를 나타내는 fontsize는 다음 구분자 위치에서 첫 구분자 위치를 뺀 값이면 되기 때문에 이렇게 코딩을 했습니다.
If Len(TextBox1). 텍스트) <= 43차에 Font Size = 0 Else FontSize = Val(InStr(시작점, TextBox1)을 입력합니다. 텍스트, “/”) – 시작점의 종료 조건 If Len(TextBox1). 텍스트) <= 43차에 Font Size = 0 Else FontSize = Val(InStr(시작점, TextBox1)을 입력합니다. 텍스트, “/”) – 시작점의 종료 조건
마지막으로 revpoint라는 변수에는 오른쪽에서 시작해서 첫 번째 구분 문자(/)의 위치를 찾기 위해서 InStrRev 함수와 글자 수를 Len함수를 활용을 했습니다. 마지막으로 revpoint라는 변수에는 오른쪽에서 시작해서 첫 번째 구분 문자(/)의 위치를 찾기 위해서 InStrRev 함수와 글자 수를 Len함수를 활용을 했습니다.
리바운드 = 렌 (TextBox1) 。テキスト) – Val (InStrRev (TextBox1) 。テキスト、”/”) 리바운드 = Len (TextBox1) 。テキスト) – Val (InStrRev (TextBox1) 。テキスト、”/”)
InStrRev는 해당 텍스트에서 오른쪽에서 스캔하여 찾는 문자가 있으면 그 위치를 숫자로 반환합니다. 단, 오른쪽에서 돌려주는 것이 아니라 왼쪽에서 위치의 값입니다. 실행해 봅시다 InStrRev는 해당 텍스트에서 오른쪽에서 스캔하여 찾는 문자가 있으면 그 위치를 숫자로 반환합니다. 단, 오른쪽에서 돌려주는 것이 아니라 왼쪽에서 위치의 값입니다. 실행해 봅시다
1.시트로 돌아가서 버튼 1을 누릅니다 1.시트로 돌아가서 버튼 1을 누릅니다
2. 바코드 리더기에서 QR을 읽을 수 있습니다. 2. 바코드 리더기에서 QR을 읽을 수 있습니다.
※ 주의사항은 반드시 textbox 1번에 포커스(focus, 커서가 깜빡깜빡)되어 있어야 합니다. 나는 바코드 리더기가 자리에 없어서 위에 있는 텍스트를 복사해서 넣도록 하겠습니다. CV11200225(GC)/ACS 10X50N 106K NLA(GC)/202301190149/PAP1219AP23A19CJ-XU ※ 주의사항은 반드시 textbox 1번에 포커스(focus, 커서가 깜빡깜빡)되어 있어야 합니다. 나는 바코드 리더기가 자리에 없어서 위에 있는 텍스트를 복사해서 넣도록 하겠습니다. CV11200225(GC)/ACS 10X 50N 106K NLA(GC)/202301190149/PAP1219AP23A19CJ-XU
아래는 이번 포스팅에서 예시한 QR코드 문자를 분리하는 예시 파일을 첨부하였습니다. 첨부파일 QR_글자슬라이싱.xlsm 파일 다운로드 내 컴퓨터 저장 아래는 이번 포스팅에서 예시한 QR코드 문자를 분리하는 예시 파일을 첨부하였습니다. 첨부파일 QR_글자슬라이싱.xlsm 파일 다운로드 내 컴퓨터 저장
네이버 MYBOX에 저장 네이버 MYBOX에 저장
여기까지 읽어주셔서 감사합니다. 여기까지 읽어주셔서 감사합니다.