엑셀에서 리스트 박스는 여러 개의 데이터를 담거나 선택을 요구할 때 쓰이는 컨트롤입니다. 오늘은 ActiveX 컨트롤 중에서 리스트 박스를 다루는 방법에 대해 알아 보겠습니다. 샘플로는 텍스트 박스를 하나 더 두고 입력한 값들을 목록 상자에 계속해서 추가하는 것입니다. 그리고 목록에서 추가될 때 위치를 지정하는 방법도 알아 보겠습니다.
▼ 먼저 ActiveX 컨트롤을 추가하기 위해서 [개발 도구] 탭으로 갑니다. 삽입 리본 메뉴를 클릭하시면 양식 컨트롤과 ActiveX 컨트롤 목록을 볼 수 있습니다. 그 중 ActiveX 컨트롤에 있는 목록 상자를 클릭합니다.
▼ 추가한 텍스트 상자에 값을 넣기 위한 버튼도 추가합니다. 버튼에 이름을 변경하기 위해 오른 마우스를 눌러 [속성] 메뉴를 선택합니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하기 ▶ 엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터 찾아 추가하기 ▶ 엑셀 VAB - For Each 문을 이용하여 컬렉션개체 반복처리하기 ▶ 엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기 ▶ 엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 |
▼ 속성창에서 Caption 항목은 컨트롤의 이름에 해당합니다. Caption 값을 변경하면 바로 반영이 됩니다.
▼ 코드 편집을 위해 버튼을 더블 클릭하거나 오른 마우스를 눌러 [코드 보기] 메뉴를 선택합니다. 그럼 함수가 자동으로 생성되고 코드를 입력할 수 있는 공간이 만들어 집니다.
▼ 리스트 박스의 이름은 왼쪽 상단 이름 상자에서 확인할 수 있습니다. 리스트 박스에 데이터들을 모두 제거하고 싶을 때 사용하는 속성은 Clear 입니다.
▼ AddItem 함수를 사용해서 추가한 데이터들은 리스트 박스 제일 하단으로 들어가게 됩니다. 만약 새로운 데이터를 제일 상단부터 추가하려면 어떻게 해야 할까요?
▼ AddItem 에는 생략 가능한 인수가 하나 더 있습니다. 두 번째 인수가 목록 상자의 위치를 결정하는 Index 값입니다. ListBox1.AddItem TextBox1.value, 0 은 목록 상자에서 제일 상단을 가리키는 것입니다. 그림처럼 “333” 을 추가하면 “111” 값 위로 들어가겠죠.
▼ 삭제 함수인 RemoveItem 도 마찬가지입니다. ListBox1.RemoveItem (0) 은 제일 상단에 있는 데이터를 삭제하게 됩니다. 실행하는 순간 이전에 추가했던 “333” 이 삭제되겠죠.
▼ 오류의 가능성에 대한 대처도 필요합니다. 인덱스 값을 잘못 지정할 수 있기 때문입니다. 잘못된 index 값에 의해 에러는 다음과 같습니다.
▼ 에러 처리를 위한 소스는 다음과 같습니다. On Error GoTo 지시어와 ERROR_HANDLER 핸들을 사용해서 에러가 났을 때 ERROR_HANDLER: 아래로 점프하게 합니다. 이곳에서 에러 처리를 위한 소스를 만드시면 됩니다.
Private Sub CommandButton2_Click()
On Error GoTo ERROR_HANDLER
ListBox1.RemoveItem (10)
ERROR_HANDLER:
RemoveListItem = False
End Sub
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하기 ▶ 엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터 찾아 추가하기 ▶ 엑셀 VAB - For Each 문을 이용하여 컬렉션개체 반복처리하기 ▶ 엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기 ▶ 엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 긴 소스 줄 바꿈으로 가독성 높이기 (0) | 2024.07.03 |
---|---|
엑셀 VBA 차트 매크로로 만드는 방법 (3) | 2024.07.03 |
엑셀 VBA 주민번호, 이메일 문자열 잘라 내는 방법 (8) | 2024.07.01 |
엑셀 VBA 값 숫자 여부 판단하는 IsNumberic 함수 사용하기 (2) | 2024.06.29 |
엑셀 VBA For Each 반복문 이용해서 셀 영역 병합 및 합계 구하기 (0) | 2024.06.15 |
엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 (5) | 2024.06.15 |
엑셀 VBA 데이터 분리해서 다른 시트에 붙여 넣기 (3) | 2024.06.13 |
엑셀 VBA 웹브라우저(인터넷 익스플로러) 띄우는 방법 (0) | 2024.06.12 |