VBA - 사용자 정의 폼에서 계단식 콤보 상자를 만드는 방법

VBA - 사용자 정의 폼에서 계단식 콤보 상자를 만드는 방법

소개

이 기사에서는 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/?DHhootCLYVh

VBA - 사용자 정의 폼에서 계단식 콤보 상자를 만드는 방법

소개

이 기사에서는 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/?DHhootCLYVh
이전 기사 다음 기사

톱 팁