Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀(Excel) VBA - 목록상자에서 다중선택하여 엑셀에 값 추가하기

엑셀(Excel)/VBA
반응형

엑셀(Excel) VBA - 목록상자에서 다중선택하여 엑셀에 값 추가하기

 

발환경 : Microsoft Excel 2010

 

이번에는 이전에 만들어 보았던 목록상자를 조금 업그레이드 할 예정입니다. 추가되는 기능은 상세 목록상자에서 다중선택을 할수 있도록 체크박스가 들어갈것이며 선택한 내용을 엑셀에 추가 하도록 하겠습니다.

 

이전 형태는 다음과 같았습니다. 왼쪽에 아이템을 클릭하게 되면 오른쪽에 그 상세리스트가 나오게 되는 구조이죠. 여기서 상세리스트에 체크박스와 확인 버튼을 클릭하게 되면 주문리스트 워크시트를 만들어 추가 해 보도록 합니다.

 

엑셀(Excel) VBA - 목록상자에서 다중선택하여 엑셀에 값 추가하기

 

목록상자를 선택하고 속성에서 두가지 옵션을 바꿉니다. ListStyle frmListStyleOption 으로 바꾸고 MultiSelect frmMultiSelectMulti 로 수정합니다.

엑셀(Excel) VBA - 목록상자에서 다중선택하여 엑셀에 값 추가하기

 

폼을 실행해 봅니다. 그럼 상세 목록창에 체크박스가 생겨 있는 것을 볼수 있습니다. 이제 멀티체크한 값을 엑셀 시트에 추가하면 됩니다.

엑셀(Excel) VBA - 목록상자에서 다중선택하여 엑셀에 값 추가하기

 

시트에 체크한 목록을 추가하기 위해 확인 버튼을 만들고 이벤트 함수를 등록합니다.

그리고 아래와 같이 소스를 만듭니다. 제일 먼저 알아올 정보가 추가할 시트의 Row 개수 입니다. CurrentRegion 을 이용해서 연속된 영역을 체크하면 그 개수를 알아 낼수 있는 것이죠. 추가할 시트의 위치를 알아 냈으면 이제 목록상자에서 체크한 데이터를 알아 와야 합니다. For 문을 돌면서 Selected(i) True 인 것들을 찾으면 됩니다. 그리고 True 인 것들을 Offset 이용해 데이터를 추가하면 됩니다.

 

Private Sub cmdConfirm_Click()

      

    Dim i As Long

    Dim co As Long

   

    '추가할 시트에 Row count 를 알아옵니다

    co = Sheets("상품주문").Range("A1").CurrentRegion.Rows.Count

   

    ' 선택한 것들이 있는지 체크해서 시트에추가합니다.

    With Me.lstDetail

        For i = 0 To .ListCount - 1

            If .Selected(i) Then

                Sheets("상품주문").Range("A1").Offset(co, 0) = .List(i)

                Sheets("상품주문").Range("A1").Offset(co, 1) = .List(i, 1)

co = co + 1

.Selected(i) = False

            End If

        Next

    End With

   

End Sub

 

소스를 추가하였으면 멀티선택을 해서 확인을 누릅니다. 그럼 아래와 같이 시트에 선택한 데이터가 추가 되게 될 것입니다.

엑셀(Excel) VBA - 목록상자에서 다중선택하여 엑셀에 값 추가하기

 

위의 소스를 구현해서 동작하는 영상을 참고하시기 바랍니다.

 

반응형
Posted by 녹두장군1
,