Different method.
Option Explicit
Private dic As Object
Private Sub UserForm_Initialize()
Dim a, i As Long
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = 1
a = Sheets("sheet1").Cells(1).CurrentRegion.Value
For i = 2 To UBound(a, 1)
If Not dic.exists(a(i, 1)) Then
Set dic(a(i, 1)) = CreateObject("Scripting.Dictionary")
dic(a(i, 1)).CompareMode = 1
End If
a(i, 2) = CStr(a(i, 2)): a(i, 3) = CStr(a(i, 3))
If Not dic(a(i, 1)).exists(a(i, 2)) Then
Set dic(a(i, 1))(a(i, 2)) = CreateObject("Scripting.Dictionary")
dic(a(i, 1))(a(i, 2)).CompareMode = 1
End If
dic(a(i, 1))(a(i, 2))(a(i, 3)) = _
VBA.Array(a(i, 4), a(i, 5), a(i, 6), a(i, 7))
Next
Me.ComboBox1.List = dic.keys
End Sub
Private Sub ComboBox1_Click()
ClearTB 1, 4
ClearCB 2, 3
With Me
If .ComboBox1.ListIndex > -1 Then
.ComboBox2.List = dic(.ComboBox1.Value).keys
End If
End With
End Sub
Private Sub ComboBox2_Click()
ClearTB 1, 4
ClearCB 3, 3
With Me
If .ComboBox2.ListIndex > -1 Then
.ComboBox3.List = dic(.ComboBox1.Value)(.ComboBox2.Value).keys
End If
End With
End Sub
Private Sub ComboBox3_Click()
Dim i As Long, w
With Me
If .ComboBox3.ListIndex > -1 Then
For i = 1 To 4
w = dic(.ComboBox1.Value)(.ComboBox2.Value)(.ComboBox3.Value)
Me.Controls("TextBox" & i).Value = _
dic(.ComboBox1.Value)(.ComboBox2.Value)(.ComboBox3.Value)(i - 1)
Next
End If
End With
End Sub
Private Sub ClearTB(s As Long, e As Long)
Dim i As Long
For i = s To e
Me.Controls("TextBox" & i).Value = ""
Next
End Sub
Private Sub ClearCB(s As Long, e As Long)
Dim i As Long
For i = s To e
Me.Controls("ComboBox" & i).Clear
Next
End Sub
Bookmarks