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)
- .Interior.Color = RGB(255, 220, 100)
- .Select
- End With
'셀의 회색 배경
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 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
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
- ComboBox_Country.AddItem Cells(1, i)
- Next
- End Sub
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
column_number = ComboBox_Country.ListIndex + 1
특정 국가에 대해 선택한 열의 행 수를 얻으려면 비어 있지 않은 마지막 셀의 수를 찾을 수 있습니다.
- rows_number = Cells(1, column_number).End(xlDown).Row
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
-
-
- 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
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
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
Private Sub ListBox_Cities_Click()
TextBox_Choice.Value = ListBox_Cities.Value
End Sub
이 Excel 파일에서 완성된 예제를 볼 수 있습니다: userform4b.xls