컨트롤(Controls)은 양식 외부에서도 사용할 수 있습니다. 다음 예에서는 워크시트에서 직접 컨트롤을 사용합니다.
워크시트에 있는 특정 컨트롤을 수정하려면 "디자이너 모드"("Design mode")를 활성화해야 합니다(또한 이 컨트롤을 사용하려면 비활성화해야 함).
다음 예를 살펴보기 전에 다음을 살펴보겠습니다.
이제 셀에 배경색을 추가하고 30행 x 10열의 정의된 영역에서 슬라이더 위치에 따라 셀을 선택하려고 합니다.
화면 스크롤을 위한 수직 슬라이더의 속성은 다음과 같습니다.
수평 슬라이더는 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
이것이 다음 예제의 시작점입니다.
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