image

데이터 유효성 검사를 사용하여 워크 시트에 계단식 드롭 다운을 만드는 방법을 알고 있습니다. 그러나 VBA 사용자 양식에서 계단식 콤보 상자 드롭 다운을 어떻게 생성합니까? 이것은 기본적인 요구 사항 중 하나입니다. 이 기사에서는 VBA에서 종속 콤보 상자를 만드는 방법을 알아 봅니다. === VBA의 종속 콤보 상자에 대한 논리 VBA에서 종속 콤보 상자를 만들려면 소스 요소의 이벤트에서 콤보 상자를 초기화해야합니다. 예를 들어 콤보 박스가 라디오 버튼 그룹에 종속 된 경우 종속 콤보 박스를로드하는 코드는 누군가 라디오 버튼을 선택한 직후에 실행되어야합니다. 또는 콤보 박스가 다른 콤보 박스에 의존하는 경우 콤보 박스에 따라 콤보 박스의 값이 변경 될 때마다로드되어야합니다.

이론은 충분합니다. 어떻게 작동하는지보기 위해 예제를 살펴 보겠습니다.

ComboBox 다른 콤보 상자에 따라 달라짐 두 개의 콤보 상자를 만듭니다. 먼저 몇 개의 국가 이름을 나열해야합니다.

다른 하나는 선택한 국가의 주 이름을 나열해야합니다. 사용자가 첫 번째 콤보 박스에서 국가를 변경하면 두 번째 콤보 박스의 목록을 변경해야합니다.

국가 및 주 레이블이있는 두 개의 콤보 상자와 입력을 제출하는 명령 단추가있는 양식을 만들어 보겠습니다.

image

첫 번째 콤보 상자는 국가 이름을 나열해야하며 값에 의존하지 않습니다. 따라서 기본 콤보 상자 초기화와 마찬가지로 form_intialize 이벤트에서로드합니다.

사용자 양식을 두 번 클릭하십시오. UserForm Object에서 코딩 영역이 열립니다. 이제 왼쪽 드롭 다운 메뉴에서 사용자 양식을 선택합니다. 그런 다음 오른쪽 드롭 다운 메뉴에서 초기화를 선택합니다.

image

빈 하위 이름 UserForm_Initialize ()가 삽입됩니다. 이 서브에 작성된 모든 것은 사용자 폼이 나타나기 전에 실행됩니다.

그래서 여기에 combobox의 초기화 코드를 작성합니다.

Private Sub UserForm_Initialize()

countries = Array("India", "Nepal", "Bhutan", "Shree Lanka")

UserForm1.ComboBox1.List = states

End Sub

첫 번째 콤보 박스가 초기화되었습니다. 사용자 양식을로드 할 때마다 첫 번째 combox에 국가 이름이 표시됩니다.

이제 두 번째 콤보 박스를로드하려면 첫 번째 combobox1에서 선택된 값을 확인하고 combobox1이 값을 변경할 때마다 코드를 실행해야합니다. 이를 위해 Combobox_AfterUpdate 이벤트를 사용합니다.

왼쪽 드롭 다운에서 combobox1을 선택합니다. 오른쪽 드롭 다운 메뉴에서 AfterUpdate를 선택합니다. Change 이벤트를 사용할 수도 있지만 기사에서는 AfterUpdate를 고수 할 것입니다.

이제 아래 코드를 작성하십시오.

Private Sub ComboBox1_AfterUpdate()

Select Case ComboBox1.Value

Case "India":

states = Array("Delhi", "UP", "UK", "Gujrat", "Kashmir")

Case "Nepal":

states = Array("Arun Kshetra", "Janakpur Kshetra", "Kathmandu Kshetra",_

"Gandak Kshetra", "Kapilavastu Kshetra")

Case "Bhutan":

states = Array("Bumthang", "Trongsa", "Punakha", "Thimphu", "Paro")

Case "Shree Lanka":

states = Array("Galle", "Ratnapura", "Colombo", "Badulla", "Jaffna")

End Select



ComboBox2.List = states



End Sub

image

여기에서는 select case 문을 사용했습니다. select case 문은 많은 값에서 선택된 값을보고 싶을 때 좋습니다. 나는 그것을`link : / general-topics-in-vba-vba-select-case-alternative-of-nested-if-else-if-statements [여기에서 자세히]`설명했습니다.

사용자가 삽입 한 값을 저장하려면 제출 버튼을 사용하십시오. 명령 버튼 제출에 아래 코드를 작성하여 사용자가 선택한 국가 및 주를 워크 시트에 저장합니다.

Private Sub CommandButton1_Click()

country = ComboBox1.Value

State = ComboBox2.Value

ThisWorkbook.Worksheets("sheet1").Range("G1") = country

ThisWorkbook.Worksheets("sheet1").Range("H1") = State

Unload Me

End Sub

이제 userform을 보여주기 위해 워크 시트에 버튼을 삽입하고 아래 코드를 작성합니다. 또는 간단한 모듈을 사용하여 사용자 양식을 표시 할 수 있습니다.

Sub load_userform()

UserForm1.Show

End Sub

이제 load_userform 코드를 실행하십시오.

image

어떻게 작동합니까?

userform.show 코드가있는 sub를 실행하면 VBA는 userform.show 명령을 실행 한 직후 userform_initialize 이벤트를 실행합니다. userform_intialize 이벤트에서 국가 목록이있는 첫 번째 콤보 상자를 초기화했습니다. 그 후에 양식이 사용자에게 표시됩니다.

이제 사용자가 첫 번째 콤보 상자에서 값을 선택하면 이벤트 combobox1_AfterUpdate 이벤트가 실행됩니다. 이 이벤트에는 combobox1에서 사용자가 선택한 값을 확인하는 코드가 포함되어 있으며 해당 값을 기반으로 상태 배열을 설정하고 상태 배열로 combobox2 값을 초기화합니다.

예, 이것이 VBA 사용자 양식에서 계단식 콤보 상자를 만드는 방법입니다. 나는 내가 충분히 설명했고 그 기사가 그 목적을 달성하기를 바랍니다. 이 기사 또는 VBA 주제에 대해 의문이 있으시면 아래 의견 섹션에서 저에게 물어보십시오.

관련 기사 :

link : / applications-word-outlook-in-vba-getting-started-with-excel-vba-userforms [Getting Started With Excel VBA UserForms]| * Excel에서 양식을 만드는 방법, 사용 방법을 설명합니다. VBA 도구 상자, 사용자 입력 처리 방법 및 마지막으로 사용자 입력 저장 방법. 하나의 예제와 단계별 가이드를 사용하여 이러한 주제를 살펴 보겠습니다.

link : / general-topics-in-vba-vba-variables-in-excel [Excel의 VBA 변수]| * VBA는 Visual Basic for Applications를 나타냅니다.

Microsoft의 프로그래밍 언어입니다. MSExcel, MS-Word 및 MS-Access와 같은 Microsoft Office 응용 프로그램에서 사용되는 반면 VBA 변수는 특정 키워드입니다.

link : / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]| * 모든 프로그래밍 언어에는 정의 된 변수에 액세스 할 수있는 위치를 정의하는 변수 액세스 지정자가 있습니다. Excel VBA도 예외는 아닙니다. VBA에도 범위 지정자가 있습니다.

link : / cells-ranges-rows-and-columns-in-vba-byref-and-byval-arguments-vba-interview-question [ByRef 및 ByVal 인수]| 인수가 ByRef 인수로 다른 하위 또는 함수에 전달되면 실제 변수의 참조가 전송됩니다. 변수 복사본에 대한 변경 사항은 원래 인수에 반영됩니다.

link : / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [Microsoft Excel에서 VBA를 사용하여 확인 메시지없이 시트 삭제]| VBA를 사용하여 시트를 삭제하고 있으므로 수행중인 작업을 알고 있습니다.

이 경고를 표시하지 않고 망할 시트를 삭제하도록 Excel에 지시하고 싶습니다.

link : / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 새 통합 문서 추가 및 저장]| 이 코드에서는 먼저 통합 문서 개체에 대한 참조를 만들었습니다. 그런 다음 새 통합 문서 개체로 초기화했습니다. 이 접근 방식의 이점은이 새 통합 문서에서 작업을 쉽게 수행 할 수 있다는 것입니다. 저장, 닫기, 삭제 등`link : / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [메시지 표시 켜기 Excel VBA 상태 표시 줄 *]`| Excel의 상태 표시 줄은 코드 모니터로 사용할 수 있습니다. VBA 코드가 길고 VBA를 사용하여 여러 작업을 수행하는 경우 화면 깜박임이 표시되지 않도록 화면 업데이트를 비활성화하는 경우가 많습니다.

link : / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 경고 메시지 끄기]| *이 코드는 VBA를 비활성화 할뿐만 아니라 경고뿐만 아니라 코드의 시간 효율성도 증가시킵니다. 방법을 봅시다.

인기 기사 :

link : / keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [50 개의 Excel 단축키로 생산성 향상]| 작업 속도를 높이십시오. 이 50 개의 바로 가기를 사용하면 Excel에서 더 빠르게 작업 할 수 있습니다.

link : / formulas-and-functions-introduction-of-vlookup-function [Excel의 VLOOKUP 함수]| 이것은 다른 범위와 시트에서 값을 조회하는 데 사용되는 Excel의 가장 많이 사용되고 인기있는 기능 중 하나입니다. link : / tips-countif-in-microsoft-excel [Excel 2016의 COUNTIF]| 이 놀라운 기능을 사용하여 조건으로 값을 계산합니다. 특정 값을 계산하기 위해 데이터를 필터링 할 필요가 없습니다.

Countif 기능은 대시 보드를 준비하는 데 필수적입니다.

link : / excel-formula-and-function-excel-sumif-function [Excel에서 SUMIF 함수 사용 방법]| 이것은 또 다른 대시 보드 필수 기능입니다. 이를 통해 특정 조건에 대한 값을 합산 할 수 있습니다.