오늘은 VBA 폼을 잘 다루기 위한 연습 문제입니다. 구현할 예제는 왼쪽 목록 박스에 들어가 있는 데이터 중 하나 혹은 여러 개를 선택해서 바로 옆에 있는 목록 박스로 옮기는 예제 입니다. 데이터를 여러 개 추가해서 관리할 수 있는 목록 박스는 옵션에 따라 단일과 멀티 선택이 가능합니다. 샘플 예제는 3가지 옵션에 따라 어떤 식으로 선택해서 전송을 하는지 알려 줍니다.
▼ 먼저 폼을 추가합니다. 왼쪽에서 오른쪽으로 자료를 보낼 버튼과 목록 상자 두 개를 생성합니다. 그리고 아래에는 목록 상자에 데이터가 단일 혹은 멀티 선택이 될 수 있도록 설정하는 옵션을 위치시킵니다.
▼ 폼이 뜨면 실행되는 초기화 함수부터 구현합니다. 왼쪽 콤보박스에서 UserForm 과 오른쪽 콤보박스에서 Initialize 를 선택합니다. 그럼 초기화 함수 UserForm_Initialize() 함수가 자동으로 생성됩니다. 함수에는 왼쪽 목록 상자에 데이터를 채우는 기능이 있습니다.
Private Sub UserForm_Initialize() With ListBox1 .AddItem "사과" .AddItem "포도" .AddItem "망고" .AddItem "토마토" .AddItem "블루베리" End With OptionButton1.Value = True End Sub |
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 Excel VBA 개발에 도움이 되는 편집기창 이용 방법들 ▶ 엑셀 VBA 매크로 실행 버튼으로 코드 실행하기 ▶ 엑셀 Excel 매크로 실행과 소스 편집하기 ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 ▶ 엑셀 VBA 카메라 기능을 매크로로 작성하기 |
▼ 두 개의 목록 버튼 사이에 있는 “추가” 버튼은 왼쪽에서 오른쪽으로 데이터를 복사하는 기능을 합니다. 왼쪽 목록에서 Selected 함수로 선택되었는지 여부를 판단한 뒤 오른쪽 목록에 AddItem 함수를 이용해서 데이터를 추가합니다.
Private Sub CommandButton1_Click() For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i) Next i End Sub |
▼ 두 번째 버튼인 “삭제” 는 오른쪽 목록에 있는 데이터를 삭제하는 기능을 합니다. 아래 옵션 선택 여부에 따라서 단일/멀티로 선택된 데이터만 삭제를 합니다.
Private Sub CommandButton2_Click() Dim counter As Integer counter = 0 For i = 0 To ListBox2.ListCount - 1 If ListBox2.Selected(i - counter) Then ListBox2.RemoveItem (i - counter) counter = counter + 1 End If Next i 'CheckBox2.Value = False End Sub |
▼ 마지막으로 Type 에 있는 3가지 옵션의 클릭 이벤트 함수를 구현합니다. 목록 상자에 단일/멀티 속성 여부는 MultiSelect 의 값에 따라 결정됩니다. 순서에 따라 단일 선택은 1, 클릭으로 멀티 선택할 수 있는 옵션은 2, Ctrl 키를 이용해서 멀티 선택할 수 있는 방식은 3으로 세팅해 줘야 합니다. 어떻게 구현되었는지 보시고 싶다면 아래 동영상을 참고하시기 바랍니다.
Private Sub OptionButton1_Click() ListBox1.MultiSelect = 0 ListBox2.MultiSelect = 0 End Sub Private Sub OptionButton2_Click() ListBox1.MultiSelect = 1 ListBox2.MultiSelect = 1 End Sub Private Sub OptionButton3_Click() ListBox1.MultiSelect = 2 ListBox2.MultiSelect = 2 End Sub |
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 Excel VBA 개발에 도움이 되는 편집기창 이용 방법들 ▶ 엑셀 VBA 매크로 실행 버튼으로 코드 실행하기 ▶ 엑셀 Excel 매크로 실행과 소스 편집하기 ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 ▶ 엑셀 VBA 카메라 기능을 매크로로 작성하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA On Error GoTo 반복문에서 에러 거르기 (0) | 2023.06.09 |
---|---|
엑셀 VBA 배열의 크기를 알아 내기 (0) | 2023.05.29 |
엑셀 VBA 반복문 Do Until 사용하기 (0) | 2023.05.28 |
엑셀 VBA 셀 데이터 검색해서 찾기 (8) | 2023.05.23 |
엑셀 VBA 반복문 이용 컨트롤 한번에 제어하기 (0) | 2023.03.25 |
엑셀 VBA Option Explicit 문 변수선언 에러 적용하기 (1) | 2023.03.20 |
엑셀 VBA 모듈 소스 다른 통합 문서에 복사하기 (0) | 2023.03.17 |
엑셀 VBA 선택한 영역 재조절 기능 Selection.Resize 함수 사용하기 (2) | 2023.03.17 |