[Access VBA] listbox의 선택된 행의 데이터를 읽는 방법

Access 에서 폼을 이용할 때 리스트박스의 활용도가 높습니다. 데이터베이스의 값을 가공하여 사용자가 볼 수 있도록 정리하여 보여줄 수 있어 강력한 사용자 편의성을 제공합니다.

리스트박스가 진정으로 활용성을 가지려면 사용자와의 상호작용을 적극적으로 반영할 수 있어야 합니다. 즉, 사용자가 어떠한 항목을 선택했는지를 확인하고 선택한 값에 따라서 다음 행동을 수행할 수 있어야 하기 때문에 리스트박스에서 사용자의 선택한 행의 인덱스 값이나 실제 내용을 확인할 수 있는 방법을 정리해 보겠습니다.

일단 리스트박스는 단일 열로 구성되나 여러개의 열로 구성될 수도 있습닌다. 리스트박스가 몇개의 열로 구분되었는지에 따라서 그 사용법에 차이가 있습니다. 각각의 상황에서 사용자가 선택한 데이터의 값을 찾는 방법에 차이가 있습니다. 경우별로 내용을 정리해보도록 하겠습니다.

선택된 행 index값 얻기

현재 선택된 리스트박스의 행 index번호를 얻기 위해서는 다음과 같이 작성합니다. 이 때 인덱스 번호는 0부터 시작합니다. 폼 내부에서 wsLists라는 이름을 가진 리스트박스가 있을 경우 사용자가 선택한 항목의 인덱스 번호를 리턴하는 코드입니다.

For Each varItm In Me.wsLists.ItemsSelected
    var = Me.wsLists.ListIndex
    msgbox var
Next varItm

선택된 항목의 첫번째 열의 데이터 확인

Access 파일 내에 wsList라는 리스트박스가 있고 리스트박스에 선택된 항목의 첫번째 열의 내용을 확인하는 방법입니다. 이 경우 리스트박스의 열의 개수가 단일이거나 복수여도 상관없이 작동합니다. 선택된 항목의 첫번째 항목을 전달하기 때문에 만약 선택된 항목이 없다면 에러를 발생시키게 됩니다.

For Each varItm In Me.wsLists.ItemsSelected
    name = Me.wsLists.ItemData(varItm)
    msgbox name
Next varItm

그럼 2개 이상의 열로 구성된 리스트박스에서 첫번째 열 이외의 열의 값을 얻기 위해서 어떻게 해야 할까요?

복수열의 데이터 중 중간 열의 데이터 확인하기

만약 선택된 행의 두번째 값을 얻고 싶다면 다음과 같이 작성합니다. 아래 예시는 선택된 항목의 두번째 열의 데이터값을 반환하게됩니다. 이 역시 선택된 행의 데이터를 반환하므로 리스트박스의 속성이 데이터를 선택할 수 없도록 되어 있거나 선택된 데이터가 없을 경우에는 에러를 발생시키게 됩니다.

For Each varItm In Me.wsLists.ItemsSelected
    name = Me.wsLists.Column(2)
    msgbox name
Next varItm

위와 같이 리스트박스를 이용해서 사용자와 상호작용하기 위해서 필요한 프로그래밍 기법에 대해서 알아보았습니다. 리스트박스의 다양한 다른 기능들에 대해서도 향후 기회가 되는대로 다뤄보도록 하겠습니다.

Categories VBA