VBA - 사용자 정의 폼에서 계단식 콤보 상자를 만드는 방법
VBA - 사용자 정의 폼에서 계단식 콤보 상자를 만드는 방법
![](http://img.brin-designs.com/img/games/671/vba-how-create-cascading-combo-box-userform.png)
소개
이 기사에서는 Indirect 메서드를 사용하여 계단식 콤보 상자를 채우는 방법을 학습합니다.전제 조건
- 1 통합 문서
- 1 사용자 정의 폼
- 3 콤보 박스.
또한 샘플 워크 북을 다운로드 할 수 있습니다. //cjoint.com/14au/DHhootCLYVh.htm
Excel에서 이름 관리
Excel 통합 문서에서 이름을 정의하려면 다음 중 하나를 수행하십시오.- Excel 2007 또는 이전 버전 : 삽입> 이름> 정의 .
- Excel 2010의 경우 : 리본 수식> 이름을 정의합니다.
콤보 박스의 코드
우리는 다음과 같은 일이 일어나기를 바랍니다.- 사용자 정의 폼을로드하면 ComboBox1이 채워집니다.
- 다른 콤보 상자는 첫 번째 콤보 상자의 값을 기준으로 채워집니다.
첫 번째 목록 채우기
통합 문서의 명명 된 범위의 내용으로 콤보 상자를 채우려면 구문은 다음과 같습니다.- ComboBox1.List = Application.Transpose (범위 ( "monNom"))
ComboBox 지우기 :
- Combobox1.Clear
사용자 정의 폼을로드 할 때 첫 번째 드롭 다운 목록을 작성하는 코드는 다음과 같습니다.
Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ( "Dep")) ComboBox2.Clear ComboBox3.Clear End Sub
두 번째 목록 채우기
첫 번째 드롭 다운 목록에서 값을 선택하면 ComboBox에 표시된 텍스트가 통합 문서 이름과 일치합니다.명명 된 범위의 셀 내용을 표시하려면 Change 이벤트를 사용합니다.
Private Sub ComboBox1_Change () 'Combobox département 사용자가 ComboBox1의 내용을 삭제할 때 발생하는 버그를 피하십시오. ComboBox1.Value = ""Then Exit Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End 보결
세 번째 콤보 상자의 경우 :
Private Sub ComboBox2_Change () 'ComboBox2.Value = ""Then ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub
일반적인 버그
이름없는 범위
ComboBox에 입력 한 이름은 통합 문서 이름과 일치하지 않습니다. 이것은 이름이 정의되지 않은 경우에 발생합니다. 이 문제를 피하기 위해 통합 문서의 모든 이름을 반복하는 작은 함수를 만듭니다.함수 NomDefini (Nom As String) 부울 Dim Noms As NomDefini = False For Each Noms.Names If Noms.Name = Nom Then NomDefini = True : Exit 함수 다음 Noms End Function
입력 오류
샘플 파일에서 알 수 있듯이 이름을 정의 할 때 특수 문자 나 공백을 고려하지 않습니다. 경우에 따라 변수를 편집해야 할 수도 있습니다.다음은 그 예입니다.
함수 CaracSpec (Nom As String) 문자열로 CaracSpec = 바꾸기 (Nom, "", "_") CaracSpec = 바꾸기 (CaracSpec, "-", "_") End Function
완성 된 코드
Option Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (범위 ( "Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'ComboBox1.Value = ""Then Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) If NomDefini (NomRange) Then ComboBox2.List = Application.Transpose (범위 (NomRange)) Else ComboBox2.AddItem "" "Aucune commune" End If End Sub 개인 Sub ComboBox2_Change () 'ComboBox2.Value = ""Then Exit Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) If NomDefini (NomRange) Then ComboBox3.List = Application.Transpose (Range (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "End End Sub 함수 NomDefini (Nom As String) 부울 Dim Noms As NomDefini = False For Each Noms InWorkbook.Names If Noms.Name = Nom Then NomDefini = True : 종료 함수 다음 Noms End 함수 함수 Carac (Nom, "", "_") CaracSpec 바꾸기 (CaracSpec, "-", "_") End Function
다운로드 링크
이 링크에 샘플 시트를 다운로드하십시오 : //cjoint.com/?DHhootCLYVhVBA - 사용자 정의 폼에서 계단식 콤보 상자를 만드는 방법
소개
이 기사에서는 Indirect 메서드를 사용하여 계단식 콤보 상자를 채우는 방법을 학습합니다.전제 조건
- 1 통합 문서
- 1 사용자 정의 폼
- 3 콤보 박스.
또한 샘플 워크 북을 다운로드 할 수 있습니다. //cjoint.com/14au/DHhootCLYVh.htm
Excel에서 이름 관리
Excel 통합 문서에서 이름을 정의하려면 다음 중 하나를 수행하십시오.- Excel 2007 또는 이전 버전 : 삽입> 이름> 정의.
- Excel 2010의 경우 : 리본 수식> 이름을 정의합니다.
콤보 박스의 코드
우리는 다음과 같은 일이 일어나기를 바랍니다.- 사용자 정의 폼을로드하면 ComboBox1이 채워집니다.
- 다른 콤보 상자는 첫 번째 콤보 상자의 값을 기준으로 채워집니다.
첫 번째 목록 채우기
통합 문서의 명명 된 범위의 내용으로 콤보 상자를 채우려면 구문은 다음과 같습니다.- ComboBox1.List = Application.Transpose (범위 ( "monNom"))
ComboBox 지우기 :
- Combobox1.Clear
사용자 정의 폼을로드 할 때 첫 번째 드롭 다운 목록을 작성하는 코드는 다음과 같습니다.
Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ( "Dep")) ComboBox2.Clear ComboBox3.Clear End Sub
두 번째 목록 채우기
첫 번째 드롭 다운 목록에서 값을 선택하면 ComboBox에 표시된 텍스트가 통합 문서 이름과 일치합니다.명명 된 범위의 셀 내용을 표시하려면 Change 이벤트를 사용합니다.
Private Sub ComboBox1_Change () 'Combobox département 사용자가 ComboBox1의 내용을 삭제할 때 발생하는 버그를 피하십시오. ComboBox1.Value = ""Then Exit Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End 보결
세 번째 콤보 상자의 경우 :
Private Sub ComboBox2_Change () 'ComboBox2.Value = ""Then ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub
일반적인 버그
이름없는 범위
ComboBox에 입력 된 이름은 아직 정의되지 않았기 때문에 통합 문서 이름과 일치하지 않습니다. 이 문제를 피하기 위해 우리는 작은 함수를 만들 것입니다. 그역할은 통합 문서의 모든 이름을 반복하는 것입니다.
함수 NomDefini (Nom As String) 부울 Dim Noms As NomDefini = False For Each Noms.Names If Noms.Name = Nom Then NomDefini = True : Exit 함수 다음 Noms End Function
입력 오류
샘플 파일에서 알 수 있듯이 이름을 정의 할 때 특수 문자 나 공백을 고려하지 않습니다. 경우에 따라 변수를 편집해야 할 수도 있습니다.다음은 그 예입니다.
함수 CaracSpec (Nom As String) 문자열로 CaracSpec = 바꾸기 (Nom, "", "_") CaracSpec = 바꾸기 (CaracSpec, "-", "_") End Function
완성 된 코드
Option Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (범위 ( "Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'ComboBox1.Value = ""Then Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) If NomDefini (NomRange) Then ComboBox2.List = Application.Transpose (범위 (NomRange)) Else ComboBox2.AddItem "" "Aucune commune" End If End Sub 개인 Sub ComboBox2_Change () 'ComboBox2.Value = ""Then Exit Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) If NomDefini (NomRange) Then ComboBox3.List = Application.Transpose (Range (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "End End Sub 함수 NomDefini (Nom As String) 부울 Dim Noms As NomDefini = False For Each Noms InWorkbook.Names If Noms.Name = Nom Then NomDefini = True : 종료 함수 다음 Noms End 함수 함수 Carac (Nom, "", "_") CaracSpec 바꾸기 (CaracSpec, "-", "_") End Function