TOP

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

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

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


스크롤바(스크롤바)

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

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

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

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

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

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

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

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

    Private Sub vertical_bar()
         '셀에 회색 배경 적용
         Cells.Interior.Color = RGB(240, 240, 240)
         
         '배경 적용 및 셀 선택
         With Cells(ScrollBar_vertical.Value, ActiveCell.Column)
             .Interior.Color = RGB(255, 220, 100) '주황색
             .Select '셀을 선택합니다
         End With
    End Sub
    
    Private Sub ScrollBar_vertical_Change()
         vertical_bar
    End Sub
    
    Private Sub ScrollBar_vertical_Scroll()
         vertical_bar
    End Sub
    

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

    Private Sub horizontal_bar()
         '셀에 회색 배경 적용
         Cells.Interior.Color = RGB(240, 240, 240)
    
         '배경 적용 및 셀 선택
         With Cells(ActiveCell.Row, ScrollBar_horizontal.Value)
             .Interior.Color = RGB(255, 220, 100) '주황색
             .Select '셀을 선택합니다
         End With
    End Sub
    
    Private Sub ScrollBar_horizontal_Change()
         horizontal_bar
    End Sub
    
    Private Sub ScrollBar_horizontal_Scroll()
         horizontal_bar
    End Sub
    

    드롭다운 및 ListBox(ComboBox 및 ListBox)

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

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

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

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

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

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

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

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

    column_number = ComboBox_Country.ListIndex + 1
    

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

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

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

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

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

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

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

    Private Sub ListBox_Cities_Click()
         TextBox_Choice.Value = ListBox_Cities.Value
    End Sub
    

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