TOP

VBA-수업 12.4. 제어 요소(연습)

이제 컨트롤(Controls) 사용을 연습할 수 있는 작은 연습을 살펴보겠습니다.


미리 만들어진 양식과 제어 요소가 포함된 파일이 있습니다. 사용자가 양식과의 상호 작용을 통해 즉석 데이터베이스를 채울 수 있도록 모든 요소가 작동하도록 하는 코드를 작성해야 합니다.

다운로드할 Excel 파일은 다음과 같습니다. controls_exercise.xls

이제 여기서의 목표는 양식을 사용하여 테이블을 채우는 것임이 분명해졌습니다.

고려해야 할 몇 가지 사항:

  • 국가 목록은 두 번째 시트의 목록을 기반으로 합니다.
  • 새 연락처를 추가하기 전에 제어 요소의 값을 확인합니다.
  • 값을 입력한 후 폼을 닫지 않고 컨트롤의 초기값을 반환합니다.
  • 문제를 해결하는 방법 중 하나

    먼저, 사용하기 쉽도록 양식의 Zoom 속성을 120으로 늘려야 합니다.

    우리는 이미 컨트롤에 대한 첫 번째 강의에서 옵션 버튼 확인을 다루었으므로 여기서는 간단한 솔루션을 사용합니다.

    "Mrs"는 기본적으로 선택됩니다(속성 Value: True). 즉, 선택할 때 주소를 확인하지 않습니다.

    닫기 버튼

    1. Private Sub CommandButton_Close_Click()  
    2.      Unload Me  
    3. End Sub  

    드롭다운 목록의 내용

    1. Private Sub UserForm_Initialize() '양식이 열려 있을 때 목록 로드  
    2.     For i = 1 To 252 '국가 워크시트에서 252개 국가 목록 생성  
    3.        ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)  
    4.     Next  
    5. End Sub  

    제어 요소 확인

    간단한 해결책은 컨트롤 중 하나라도 비어 있으면 대화 상자를 표시하는 것입니다.

    1. Private Sub CommandButton_Add_Click()  
    2.      If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then  
    3.          MsgBox "Form incomplete"  
    4.      Else  
    5.          '여기에 연락처 입력 지침...  
    6.      End If  
    7. End Sub  

    하지만 좀 더 복잡하게 하려면 각 요소를 별도로 검사해야 하며, 비어 있는 요소가 있으면 이름()의 색상이 빨간색으로 변경되어야 합니다.

    1. Private Sub CommandButton_Add_Click()  
    2.      '이름 색상을 검정색으로 설정  
    3.      Label_Last_Name.ForeColor  = RGB(0, 0, 0)  
    4.      Label_First_Name.ForeColor = RGB(0, 0, 0)  
    5.      Label_Address.ForeColor    = RGB(0, 0, 0)  
    6.      Label_Place.ForeColor      = RGB(0, 0, 0)  
    7.      Label_Country.ForeColor    = RGB(0, 0, 0)  
    8.   
    9.      '콘텐츠 제어  
    10.      If TextBox_Last_Name.Value = "" Then '아무것도 지정하지 않은 경우...  
    11.          Label_Last_Name.ForeColor = RGB(255, 0, 0) '제목 색상을 빨간색으로 설정  
    12.      ElseIf TextBox_First_Name.Value = "" Then  
    13.          Label_First_Name.ForeColor = RGB(255, 0, 0)  
    14.      ElseIf TextBox_Address.Value = "" Then  
    15.          Label_Address.ForeColor = RGB(255, 0, 0)  
    16.      ElseIf TextBox_Place.Value = "" Then  
    17.          Label_Place.ForeColor = RGB(255, 0, 0)  
    18.      ElseIf ComboBox_Country.Value = "" Then  
    19.          Label_Country.ForeColor = RGB(255, 0, 0)  
    20.      Else  
    21.          '여기에 연락처 입력 지침...  
    22.      End If  
    23. End Sub  

    데이터 삽입

    위의 코드에 표시된 위치에 다음 코드를 삽입해야 합니다(주석 참조).

    1. Dim row_number As Integer, salutation As String  
    2.   
    3. '항소의 선택  
    4. For Each salutation_button In Frame_Salutation.Controls  
    5.     If salutation_button.Value Then  
    6.         salutation = salutation_button.Caption '이의신청이 선택됨  
    7.     End If  
    8. Next  
    9.   
    10. 'row_number = 열 +1에서 비어 있지 않은 마지막 셀의 행 번호  
    11. row_number = Range("A65536").End(xlUp).Row + 1  
    12.   
    13. '워크시트에 값 삽입  
    14. Cells(row_number, 1) = salutation  
    15. Cells(row_number, 2) = TextBox_Last_Name.Value  
    16. Cells(row_number, 3) = TextBox_First_Name.Value  
    17. Cells(row_number, 4) = TextBox_Address.Value  
    18. Cells(row_number, 5) = TextBox_Place.Value  
    19. Cells(row_number, 6) = ComboBox_Country.Value  
    20.   
    21. '붙여넣은 후 원래 값이 반환됩니다.  
    22. OptionButton1.Value = True  
    23. TextBox_Last_Name.Value  = ""  
    24. TextBox_First_Name.Value = ""  
    25. TextBox_Address.Value    = ""  
    26. TextBox_Place.Value      = ""  
    27. ComboBox_Country.ListIndex = -1  

    일반적인 모습

    이것이 전부입니다. 여기에 연습용으로 완성된 코드와 다운로드할 파일이 있습니다.

    1. Private Sub CommandButton_Close_Click()  
    2.      Unload Me  
    3. End Sub  
    4.   
    5. Private Sub UserForm_Initialize() ''국가' 시트의 252개 국가 목록  
    6.     For i = 1 To 252  
    7.         ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)  
    8.     Next  
    9. End Sub  
    10.   
    11. Private Sub CommandButton_Add_Click()  
    12.      '이름 색상을 검정색으로 설정  
    13.      Label_Last_Name.ForeColor  = RGB(0, 0, 0)  
    14.      Label_First_Name.ForeColor = RGB(0, 0, 0)  
    15.      Label_Address.ForeColor    = RGB(0, 0, 0)  
    16.      Label_Place.ForeColor      = RGB(0, 0, 0)  
    17.      Label_Country.ForeColor    = RGB(0, 0, 0)  
    18.   
    19.      '콘텐츠 제어  
    20.      If TextBox_Last_Name.Value = "" Then '아무것도 지정하지 않은 경우...  
    21.          Label_Last_Name.ForeColor = RGB(255, 0, 0) '제목 색상을 빨간색으로 설정  
    22.      ElseIf TextBox_First_Name.Value = "" Then  
    23.          Label_First_Name.ForeColor = RGB(255, 0, 0)  
    24.      ElseIf TextBox_Address.Value = "" Then  
    25.          Label_Address.ForeColor = RGB(255, 0, 0)  
    26.      ElseIf TextBox_Place.Value = "" Then  
    27.          Label_Place.ForeColor = RGB(255, 0, 0)  
    28.      ElseIf ComboBox_Country.Value = "" Then  
    29.          Label_Country.ForeColor = RGB(255, 0, 0)  
    30.      Else  
    31.          '양식이 채워지면 해당 값이 워크시트에 붙여넣어집니다.  
    32.          Dim row_number As Integer, salutation As String  
    33.            
    34.          '항소의 선택  
    35.          For Each salutation_button In Frame_Salutation.Controls  
    36.              If salutation_button.Value Then  
    37.                  salutation = salutation_button.Caption  
    38.              End If  
    39.          Next  
    40.   
    41.          'row_number = 열 +1에서 비어 있지 않은 마지막 셀의 행 번호  
    42.          row_number = Range("A65536").End(xlUp).Row + 1  
    43.   
    44.          '워크시트에 값 삽입  
    45.          Cells(row_number, 1) = salutation  
    46.          Cells(row_number, 2) = TextBox_Last_Name.Value  
    47.          Cells(row_number, 3) = TextBox_First_Name.Value  
    48.          Cells(row_number, 4) = TextBox_Address.Value  
    49.          Cells(row_number, 5) = TextBox_Place.Value  
    50.          Cells(row_number, 6) = ComboBox_Country.Value  
    51.            
    52.          '데이터를 삽입한 후 초기값을 반환합니다.  
    53.          OptionButton1.Value = True  
    54.          TextBox_Last_Name.Value  = ""  
    55.          TextBox_First_Name.Value = ""  
    56.          TextBox_Address.Value    = ""  
    57.          TextBox_Place.Value      = ""  
    58.          ComboBox_Country.ListIndex = -1  
    59.      End If  
    60. End Sub  

    다운로드할 Excel 파일은 다음과 같습니다. controls_exercise2.xls