본문 바로가기

엑셀/VBA

VBA로 업체별 납품 품목 자동으로 작성되어 정리되도록 하기 II

반응형

이전 글(VBA로 업체별 납품 품목 자동으로 작성되어 정리되도록 하기 I)에서는 업체명, 품목 및 가격을 시트에 작성하고 VBA로 사용하기 위한 사용자 정의 폼을 디자인하였습니다. 이젠 실제적인 VBA 코드를 작성하여 디자인해 놓은 항목들이 제 기능을 발휘할 수 있도록 해보겠습니다.

 

1. 목록 상자 코드 입력

거래입력창_모습
[그림 1] 거래입력 창

만들어 놓은 [그림 1]의 거래 입력 창에서 빨간색 사각형으로 표시한 물품 선택의 목록 상자를 선택하고 보기-코드를 클릭하여 코드창을 엽니다. 단축키는 F7키입니다.

 

 

 

 

그리고 아래와 같이 코드를 입력합니다.

 

Private Sub ListBox1_Change()
Select Case ListBox1.Value
    Case "토너(Black)"
        Label4.Caption = Format(8000, "#,###")
    Case "토너(Red)"
        Label4.Caption = Format(10000, "#,###")
    Case "토너(Yellow)"
        Label4.Caption = Format(10000, "#,###")
    Case "토너(Blue)"
        Label4.Caption = Format(12000, "#,###")
End Select
End Sub

 

코드_입력창
[그림 2] 코드 입력창

[그림 2]를 보시면 빨간색 사각형으로 표시된 부분은 도구 상자 등으로 만든 아이템들을 선택할 수 있으며, 좌측 초록색 사각형으로 표시된 부분은 이벤트를 선택할 수 있습니다.

ListBox1은 물품선택을 위해 만든 목록 상자이며 Change는 목록 상자의 목록이 선택될 때마다 이 코드가 실행된다는 의미입니다. 즉 선택 목록이 변경될 때 실행됩니다.

 

2. 종료 버튼 및 초기값 코드 입력

사용자 정의 폼이 출력될 때 초기값을 설정하기 위해 UserForm이 활성화될 때 코드를 작성합니다.

 

Private Sub UserForm_Activate()
ListBox1.Value = "토너(Black)"
Label4.Caption = Format(8000, "#,###")
End Sub

 

Activate()는 활성화 이벤트를 의미합니다. 즉 창이 열릴 때 코드가 실행됩니다.

 

그리고 종료 버튼이 눌렸을 때 사용자 정의 창이 닫히게 하는 코드를 작성합니다.

 

Private Sub CommandButton2_Click()
Unload Me
End Sub

 

Click()은 클릭 이벤트를 의미합니다. 즉 버튼이 눌릴 때 이 코드가 실행됩니다.

 

 

 

3. 확인 버튼 코드 입력

 확인 버튼은 눌렸을 때 선택된 업체와 품목 및 가격을 해당 업체 시트에 값을 입력하도록 해야 합니다.

 

Private Sub CommandButton1_Click()
Dim 입력줄수 As Integer
        
Application.DisplayAlerts = False
On Error GoTo PGM_End

If ComboBox1.Value = "" Then
    MsgBox "거래처를 선택하지 않았습니다.", , "거래처 선택"
    Exit Sub
End If

Worksheets(ComboBox1.Value).Activate

입력줄수 = WorksheetFunction.CountA(Range("B:B")) + 2

Cells(입력줄수, 2) = Date
Cells(입력줄수, 3) = ListBox1.Value
Cells(입력줄수, 4) = Label4.Caption

Worksheets("Sheet1").Activate

ComboBox1.Value = ""
PGM_End:
    If Err > 0 Then
        MsgBox "작업 중에 에러가 발생하였습니다! 처음부터 다시 하세요!", , "품명 입력"
    End If
End Sub

 

우선 입력줄수라는 정수형 변수를 선언합니다. 그리고, WorksheetFunction.CountA(Range("B:B")) 코드는 해당 워크시트의 B열에 데이터가 입력되어 있는 셀의 개수를 알려줍니다. 거기에 2를 더한 이유는 업체명의 시트 제목을 입력할 때 1행은 비워두었고 2행에 제목을 입력하였기 때문입니다.

각 업체별 시트에는 B열에는 날자가, C열에는 품명이, D열에는 금액이 입력됩니다.

입력이 완료되면 Sheet1이 활성화되고 선택되어 있던 업체명은 미선택됩니다.

 

모두 입력하였으면 Visual Basic Editor 창에서 파일-닫고 Microsoft Excel(으)로 돌아가기를 선택하고 엑셀 Sheet1으로 갑니다.

 

4. 입력 버튼 코드 입력

 Sheet1에 만들어 놓은 '입력'버튼을 선택하고 개발도구-코드 보기를 선택하여 코드 입력창을 출력합니다.

그리고 코드 창에 아래와 같이 코드를 입력합니다.

 

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

 

입력 버튼이 눌렸을 때 UserForm1이 출력되도록 코드를 입력했습니다.

 

다시 Visual Basic Editor 창에서 파일-닫고 Microsoft Excel(으)로 돌아가기를 선택하고 엑셀 Sheet1으로 갑니다.

 

5. 입력 버튼을 클릭하여 실행

 입력 버튼을 클릭하면  원하는 UserForm1이 출력되는데 업체명을 선택하고 품명을 선택한 다음 확인 버튼을 클릭합니다. 저는 A인쇄 업체에 품명을 선택해서 입력하는 작업을 3번 했습니다. 그 결과는 [그림 3]과 같습니다.

입력한_코드_실행_결과
[그림 3] 코드 실행 결과

[그림 3]을 보시면 입력한 품목과 금액이 잘 입력되어 있는 것을 보실 수 있습니다.

 

VBA로 업체별 납품 품목 자동으로 작성되어 정리되도록 하기 I

 

VBA로 업체별 납품 품목 자동으로 작성되어 정리되도록 하기 I

업무에서 거래처별 납품 목록을 엑셀을 사용하여 관리하는 경우가 많습니다. 이때 일일이 기록하면서 좀 더 빠르고 편리하게 하는 방법은 없을까? 하는 생각을 누구나 한 번쯤 하게 됩니다. 이

mr-johndoe.tistory.com

 

반응형