기초부터 실전까지 VBA 엑셀 28 - 목록 상자 (ListBox) 추가

IT 관련 지식/VBA 공부|2020. 1. 30. 21:14
반응형
728x170

요즘에는 VBA에 대한 이야기가 조금 뜸한거 같네요 ㅎㅎ

 

직접 일일이 만들어야하니 이 카테고리가 제작하는데 시간이 제일 많이 걸려서 그렇습니다 ㅠㅠ

 

그럼 사용자폼(UserForm)에서 목록상자(ListBox)를 만드는 방법에 대해 알려드리겠습니다.

 

사용자폼 이후로는 여러분이 VBA에 대해 어느정도 지식이 있다는 가정하에 진행하기 때문에

 

아얘 처음 보시는 분은 이 카테고리로 가셔서 필요한 부분의 공부를 해주시면 감사하겠습니다.

 


1. 사용자폼 화면 만들기

 

아래의 그림 처럼 일단 사용자 폼을 만들어줍니다.

 

참고로 저 빨간색 네모는 그냥 그냥 텍스트 상자가 아니라

 

목록상자(List Box)입니다.

 

겉으로보면 일반 텍스트 박스와 생김새가 똑같기 때문에 착각하기 쉽습니다.

 

참고로 지금할려고 하는 것은

 

① 리스트(도시 후보)에서 도시를 선택한다.

② 시, 도 정보에 뭔가를 입력한다.

③  "입력"을 누른다

④ 시트에 입력 / 선택한 정보가 입력된다.

 

이렇게입니다.

 

그중에서 ①까지 만드는 방법을 집중적으로 살펴볼 예정입니다.


2. 목록 상자(List Box)에 목록 넣기

 

엑셀 시트에 다음과 같이 입력합니다.

 

이 리스트가 목록 상자에 입력될 리스트입니다.

 

그리고 UserFormUserForm_Initialize에 다음과 같이 입력합니다.

 

코드는 제일 마지막에 메모장으로 올리겠습니다.

 

지금은 최대한 그대로 따라오려고 노력해주세요.

 

 

이렇게 입력하고 F5(RUN)을 누르면 다음과 같은 사용자폼이 나오게됩니다.

 

아까 시트에 입력했던 리스트가 그대로 목록 상자안에 들어가게됩니다.

 

참고로 사용자폼에서 입력한 

 

.ColumnCount = 2

 

이게 열의 갯수를 지정하게 됩니다.

 

열의 너비가 너무 맞지 않기 때문에 너비를 조절해보겠습니다.

 

너비의 경우 ColumnWidths 속성을 이용하여 조절합니다.

 

Private Sub UserForm_Initialize()
With Me.ListBox1
    .ColumnCount = 2
    .ColumnWidths = "50;100"
    .List = Worksheets("sheet1").Range("A1:B7").Value
End With
End Sub

 

세미콜론(;)을 이용하여 각 열을 구분합니다.

 

300x250

 

그런데 리스트에서 항목 부분의 구분이 조금 애매하니 구별 시켜보겠습니다.

 

여기서는 .ColumnHeads = True 속성을 사용하여 지정합니다.

 

대신 주의할 점이 하나 있습니다.

 

지금까지는 목록 상자에 항목을 넣을 때 .List를 사용했지만

 

.List에서는 .ColumnHeads = True을 사용할 수 없습니다.

 

그래서 다른 코드를 이용하여 목록을 채울 수 있는 방법을 소개하겠습니다. 

 

.List 대신 .RowSource라는 정의를 사용하여 목록을 재지정 해줍니다. 

Private Sub UserForm_Initialize()
With Me.ListBox1
    .ColumnCount = 2
    .ColumnWidths = "30;80"
    .ColumnHeads = True
    .RowSource = Worksheets("sheet1").Range("A2:B48").Address(External:=True)
End With
End Sub

이 처럼 코드를 넣으면 다음과 같은 화면이 나옵니다

 

 


3. 목록 상자에서 "값" 취득하기

 

이제 마지막으로 선택한 리스트의 값을 취득하는 방법에 대해 알려드리겠습니다.

 

아래와 같이 코딩을 합니다.

 

하나씩 설명하자면

 

① CommandButton1("입력") 버튼을 누를 경우의 조건은 다음과 같다.

② 변수 i에 리스트 값을 저장한다.

③ 그리고 Cells(1, 4)에 i 값을 입력한다.

 

다음과 같이 실행해보겠습니다.

 

 

이상하게 "도시 이름"이 아니라 코드("2")만 나오게 됩니다.

 

그 이유는 List Box의 속성 중에 BoundBoundColumn의 값이 1이기 때문입니다.

 

이 값을 2로 바꾸어줍니다.

 

그리고 다시 한번 더 실행해봅니다.

 

 

이번에는 제대로 "도시 후보"가 나오네요 ㅎㅎ

 

VBA_28.txt
0.00MB


이렇게 오늘은 목록 상자를 활용하는 방법에 대해 알아봤습니다.

 

더 많은 VBA 자료를 보고 싶다면 ☜ 여기!!

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀1 - 매크로 사용준비

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀2 - 모듈 생성과 설정

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀3 - Sub, End Sub

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀4 - Range 사용법 및 특징

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀5 - 셀 지정법(Cells, Rows, Columns)

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀6 - Dim 변수선언

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀7 - Const 상수 선언

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀8 - 반복문 For

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀9 - 반복문 Do ~ Loop

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀10 - 마지막 행 얻기(End)

등등

 

사용자폼(UserForm)에 대한 VBA 자료를 보고 싶다면 ☜ 여기!!

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀 25 - UserForm

[IT 관련 지식/VBA 공부] - 기초부터 실전까지 VBA 엑셀 26 - UserForm 명령단추

 

일본에서 이야기하는 한국뉴스!

[일본 뉴스] - 일본 뉴스 분석 - 日 주요 언론, 조속한 한일 정상회담 개최 촉구

[일본 뉴스] - 일본 뉴스 분석 - 아베, 이 총리에게도 "국가간 약속지켜야" 거듭 억지

 

직장인인데 일본에서 친구를 만들고 싶다고요? 👈Click!

반응형

댓글()