본문 바로가기

엑셀/VBA

엑셀 VBA ListView 컨트롤 사용하기

반응형

이전 글에서 ListBox에 대해 알아보았습니다. 이번에는 ListBox와 비슷한 ListView에 대해 알아보겠습니다.

 

엑셀 VBA ListBox 컨트롤 사용하기

 

엑셀 VBA ListBox 컨트롤 사용하기

이전 글에서 목록을 만드는 데 사용하는 콤보 상자(ComboBox) 컨트롤에 대해 알아보았습니다. 이번에는 목록 상자(ListBox) 컨트롤에 대해 알아보겠습니다. 엑셀 VBA 목록 만들기 - ComboBox 엑셀 VBA 목록

mr-johndoe.tistory.com

 

1. ListView 컨트롤

  앞에서 살펴본 ListBox는 데이터를 한 번에 볼 수 있도록 해주는 컨트롤이지만 제목 줄은 별도로 세팅을 해줘야 하는 번거로움이 있습니다. ListBox와 비슷한 컨트롤인 ListView 컨트롤은 데이터를 한 번에 볼 수 있게 해주는 컨트롤로 동일하지만, ListBox와는 다르게 제목 줄이 기본적으로 표시되며 이 제목 줄을 이용하여 데이터 정렬을 할 수 있습니다.

 

 

 

 

ListView 컨트롤은 사용자 정의 폼 도구 상자에 기본적으로 표시되지 않기 때문에 추가 등록이 필요합니다.

VBE 창을 열고 사용자 정의 폼(UserForm)을 생성하신 후 도구 상자 여백에서 마우스 오른쪽 버튼을 클릭하시면 메뉴가 뜹니다. 메뉴에서 추가 컨트롤을 클릭합니다.

 

도구상자-ListView추가
[그림 1] 도구 상자 - ListView 추가

[그림 1]과 같은 창이 뜨는데 사용 가능한 컨트롤에서 Microsoft ListView Control, version 6.0을 선택하시고 확인 버튼을 클릭하시면 도구 상자에 새로운 아이콘이 생성됩니다.

 

도구상자-ListView
[그림 2] 도구 상자 - ListView

[그림 2]에 빨간색 사각형으로 표시한 아이콘이 새로 추가한 ListView입니다. 이 아이콘을 클릭하시면 이제 사용자 정의 폼에 ListView를 생성하실 수 있습니다.

 

 

 

 

2. 예제로 확인

ListBox를 알아볼 때 사용하였던 영업실적 예제로 ListView를 확인해 보겠습니다. 엑셀 시트에 ActiveX 버튼 한 개를 생성하고 VBE 창을 엽니다.

VBE 창에서 사용자 정의 폼(UserForm)을 생성합니다.

 

UserForm-ListView
[그림 3] 사용자 정의 폼 - ListView

[그림 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에 표시되어 있는 것을 확인하실 수 있습니다.

 

반응형