이전 글에서 ListBox에 대해 알아보았습니다. 이번에는 ListBox와 비슷한 ListView에 대해 알아보겠습니다.
1. ListView 컨트롤
앞에서 살펴본 ListBox는 데이터를 한 번에 볼 수 있도록 해주는 컨트롤이지만 제목 줄은 별도로 세팅을 해줘야 하는 번거로움이 있습니다. ListBox와 비슷한 컨트롤인 ListView 컨트롤은 데이터를 한 번에 볼 수 있게 해주는 컨트롤로 동일하지만, ListBox와는 다르게 제목 줄이 기본적으로 표시되며 이 제목 줄을 이용하여 데이터 정렬을 할 수 있습니다.
ListView 컨트롤은 사용자 정의 폼 도구 상자에 기본적으로 표시되지 않기 때문에 추가 등록이 필요합니다.
VBE 창을 열고 사용자 정의 폼(UserForm)을 생성하신 후 도구 상자 여백에서 마우스 오른쪽 버튼을 클릭하시면 메뉴가 뜹니다. 메뉴에서 추가 컨트롤을 클릭합니다.
[그림 1]과 같은 창이 뜨는데 사용 가능한 컨트롤에서 Microsoft ListView Control, version 6.0을 선택하시고 확인 버튼을 클릭하시면 도구 상자에 새로운 아이콘이 생성됩니다.
[그림 2]에 빨간색 사각형으로 표시한 아이콘이 새로 추가한 ListView입니다. 이 아이콘을 클릭하시면 이제 사용자 정의 폼에 ListView를 생성하실 수 있습니다.
2. 예제로 확인
ListBox를 알아볼 때 사용하였던 영업실적 예제로 ListView를 확인해 보겠습니다. 엑셀 시트에 ActiveX 버튼 한 개를 생성하고 VBE 창을 엽니다.
VBE 창에서 사용자 정의 폼(UserForm)을 생성합니다.
[그림 3]과 같이 ListView 1개와 버튼 1개를 생성하여 구성합니다.
ListView를 마우스로 선택하고 속성 창에서 다음과 같이 셋팅을 합니다.
AllowColumnReorder : True
FullRowSelect : True
GridLines : True
HideSelection : False
LabelEdit : 1 - lvwManual
View : 3 - lvwReport
AllowColumnReorder 속성은 열 너비를 마우스로 드래그하여 조정 가능토록 할 것인지를 설정합니다. True일 경우에는 조정이 가능하며, False이면 마우스로 드래그하여 조정할 수 없습니다.
FullRowSelect 속성은 ListView 컨트롤 내에 있는 항목을 마우스로 선택하면 해당하는 행 전체가 선택되도록 할 것인지를 결정합니다. True인 경우에는 행 전체가 선택됩니다.
GridLines 속성은 ListView에 눈금선을 표시할 것인지를 결정합니다. True인 경우 눈금선을 표시합니다.
HideSelection 속성은 다른 컨트롤을 선택하였을 때 ListView 컨트롤의 선택 부분을 숨길 것인지 결정합니다. True인 경우 숨기는 기능을 활성화하게 됩니다.
LabelEdit 속성에는 IvwManual과 IvwAutomatic 두 가지 내장 상수가 있습니다.
IvwAutomatic을 설정한 경우에는 마우스로 ListView 항목 수정이 가능합니다.
하지만, IvwManual로 설정해 놓으면 ListView 항목을 마우스로 클릭하여 수정할 수 없게 됩니다.
View 속성에서는 다음 4가지 내장상수가 있습니다.
내장상수 | 설 명 |
IvwIcon | 큰 아이콘을 이용해 항목을 표시. 아이콘은 ImageList를 이용하여 표시 |
IvwList | 열 하나의 값만 표시 |
IvwReport | 여러 개의 열을 머리글과 함께 표시 |
IvwSmallIcon | 작은 아이콘으로 항목 표시. 아이콘은 ImageList를 이용하여 표시 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
이제 생성한 사용자 정의 폼에 대한 코드를 다음과 같이 작성합니다.
Private Sub UserForm_Initialize()
Dim 직원 As Range
Dim 셀 As Range
Dim i As Integer
Dim j As Integer
With ListView1.ColumnHeaders
.Add Text:="성명", Width:=100
.Add Text:="직위", Width:=100
.Add Text:="상반기", Width:=150
.Add Text:="하반기", Width:=150
End With
Set 직원 = Range("B5", Cells(Rows.Count, "B").End(xlUp))
For Each 셀 In 직원
ListView1.ListItems.Add Text:=셀.Value
j = j + 1
For i = 1 To 3
ListView1.ListItems(j).SubItems(i) = 셀.Offset(, i).Value
Next
Next
End Sub
여기서, ListView1.ColumnHeaders.Add는 ListView에 머리글을 작성하는 코드입니다. Add 메서드에 사용가능한 내장 상수는 다음과 같습니다.
내장 상수 | 설 명 |
Key | 해당 열에 해당하는 키 값 |
Text | 열 머리글에 표시되는 텍스트 |
Width | 열 너비 |
Alignment | 열 머리글의 정렬 (왼쪽 정렬, 가운데 정렬, 오른쪽 정렬) 첫번째 열은 반드시 왼쪽 정렬로 지정되어 있어야 합니다. |
ListView1.ListItems(j).SubItems(i)에서 ListItems에는 직원명이 입력되며 그 하위 아이템(SubItems)에 직위와 상반기 실적, 하반기 실적이 입력됩니다.
사용자 정의 폼에서 취소 버튼(CommandButton2)을 마우스로 더블 클릭하시고 다음과 같이 코드를 작성합니다.
Private Sub CommandButton2_Click()
Unload Me
End Sub
엑셀 시트에 작성한 ActiveX 버튼을 클릭하시면 사용자 정의 폼이 출력되면서 영업실적 내용이 ListView에 표시되어 있는 것을 확인하실 수 있습니다.
'엑셀 > VBA' 카테고리의 다른 글
VBA 날자 계산 내장 함수 - DateAdd, DatePart, DateDiff (1) | 2022.01.19 |
---|---|
엑셀 VBA 값 찾기 메서드 Find 알아보기 (0) | 2022.01.18 |
엑셀 VBA ScrollBar & SpinButton 사용하기 (0) | 2022.01.15 |
엑셀 VBA ListBox 컨트롤 사용하기 (0) | 2022.01.13 |
엑셀 VBA 목록 만들기 - ComboBox (1) | 2022.01.11 |