TOP

VBA-수업 12.3. 컨트롤(Controls)

컨트롤(Controls)은 양식 외부에서도 사용할 수 있습니다. 다음 예에서는 워크시트에서 직접 컨트롤을 사용합니다.

워크시트에 있는 특정 컨트롤을 수정하려면 "디자이너 모드"("Design mode")를 활성화해야 합니다(또한 이 컨트롤을 사용하려면 비활성화해야 함).


스크롤바(스크롤바)

다음 예를 살펴보기 전에 다음을 살펴보겠습니다.

이제 셀에 배경색을 추가하고 30행 x 10열의 정의된 영역에서 슬라이더 위치에 따라 셀을 선택하려고 합니다.

화면 스크롤을 위한 수직 슬라이더의 속성은 다음과 같습니다.

  • Min : 1
  • Max : 30 (30행)
  • Value : 슬라이더 위치(이 경우 1~30 사이)
  • 수평 슬라이더는 Max : 10을 제외하고 동일합니다.

    다음은 수직 슬라이더(Value)의 값이 변경될 때마다 실행되는 코드입니다.

    1. '셀의 회색 배경  
    2. Cells.Interior.Color = RGB(240, 240, 240)  
    3.   
    4. '색상을 적용하고 셀을 선택합니다  
    5. With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Value(Value)를 사용하여 셀을 정의합니다.  
    6.     .Interior.Color = RGB(255, 220, 100) '오렌지 컬러를 사용하고 있어요  
    7.     .Select '셀을 선택합니다  
    8. End With  

    이 코드는 ChangeScroll 이벤트가 발생할 때 트리거되며 클릭한 슬라이더 부분에 관계없이 명령을 실행합니다.

    다음은 수직 슬라이더에 대한 코드입니다.

    1. Private Sub vertical_bar()  
    2.      '셀에 회색 배경 적용  
    3.      Cells.Interior.Color = RGB(240, 240, 240)  
    4.        
    5.      '배경 적용 및 셀 선택  
    6.      With Cells(ScrollBar_vertical.Value, ActiveCell.Column)  
    7.          .Interior.Color = RGB(255, 220, 100) '주황색  
    8.          .Select '셀을 선택합니다  
    9.      End With  
    10. End Sub  
    11.   
    12. Private Sub ScrollBar_vertical_Change()  
    13.      vertical_bar  
    14. End Sub  
    15.   
    16. Private Sub ScrollBar_vertical_Scroll()  
    17.      vertical_bar  
    18. End Sub  

    그리고 여기에 수평 슬라이더에 대한 코드가 있습니다.

    1. Private Sub horizontal_bar()  
    2.      '셀에 회색 배경 적용  
    3.      Cells.Interior.Color = RGB(240, 240, 240)  
    4.   
    5.      '배경 적용 및 셀 선택  
    6.      With Cells(ActiveCell.Row, ScrollBar_horizontal.Value)  
    7.          .Interior.Color = RGB(255, 220, 100) '주황색  
    8.          .Select '셀을 선택합니다  
    9.      End With  
    10. End Sub  
    11.   
    12. Private Sub ScrollBar_horizontal_Change()  
    13.      horizontal_bar  
    14. End Sub  
    15.   
    16. Private Sub ScrollBar_horizontal_Scroll()  
    17.      horizontal_bar  
    18. End Sub  

    드롭다운 및 ListBox(ComboBox 및 ListBox)

    이것이 다음 예제의 시작점입니다.

    Excel 예제 파일을 다운로드할 수 있습니다: userform4.xls

    양식을 실행할 때 4개 국가가 드롭다운 목록에 로드되기를 원합니다(AddItem 메소드 사용).

    1. Private Sub UserForm_Initialize()  
    2.      For i = 1 To 4 '=> 4개국을 채우다  
    3.         ComboBox_Country.AddItem Cells(1, i) '루프를 사용하여 A1에서 A4까지 셀 값을 추가합니다.  
    4.     Next  
    5. End Sub  

    드롭다운 값이 변경되면 이전 루프와 유사한 루프를 사용하여 선택한 국가의 도시를 추가하려고 합니다.

    이렇게 하려면 열의 수와 이 열에 있는 도시(행)의 수를 알아야 합니다.

    ListIndex 속성에는 드롭다운 목록에서 선택한 항목의 시퀀스 번호가 포함됩니다(목록 항목의 값이 포함된 Value과 달리). ListIndex은 숫자 0으로 시작합니다.

    열 번호는 다음을 통해 얻습니다.

    1. column_number = ComboBox_Country.ListIndex + 1  

    특정 국가에 대해 선택한 열의 행 수를 얻으려면 비어 있지 않은 마지막 셀의 수를 찾을 수 있습니다.

    1. rows_number = Cells(1, column_number).End(xlDown).Row  

    이제 이 정보를 사용하여 목록에 도시를 추가하는 루프를 생성할 수 있습니다.

    1. Private Sub ComboBox_Country_Change()  
    2.      '목록 지우기(그렇지 않으면 도시가 즉시 추가됩니다)  
    3.      ListBox_Cities.Clear  
    4.        
    5.      Dim column_number As Integer, rows_number As Integer  
    6.        
    7.      '선택한 요소의 시퀀스 번호(ListIndex는 0으로 시작):  
    8.      column_number = ComboBox_Country.ListIndex + 1  
    9.      '국가가 포함된 선택한 열의 행 수:  
    10.      rows_number = Cells(1, column_number).End(xlDown).Row  
    11.   
    12.      For i = 2 To rows_number '=> 도시로 목록 채우기  
    13.         ListBox_Cities.AddItem Cells(i, column_number)  
    14.      Next  
    15. End Sub  

    참고: 코드를 줄일 수는 있지만 그렇게 하면 가독성이 떨어집니다.

    1. Private Sub ComboBox_Country_Change()  
    2.      ListBox_Cities.Clear  
    3.      For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row  
    4.          ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1)  
    5.      Next  
    6. End Sub  

    우리가 선택한 도시는 "Choice" 텍스트 필드("Choice")에 입력됩니다.

    1. Private Sub ListBox_Cities_Click()  
    2.      TextBox_Choice.Value = ListBox_Cities.Value  
    3. End Sub  

    이 Excel 파일에서 완성된 예제를 볼 수 있습니다: userform4b.xls