1) To ThisWorkbook module
Private Sub Workbook_Open()
Run "sheet2.worksheet_activate"
End Sub
Sheet2 module
Option Explicit
Private dic As Object
Private x As Variant
Private Sub Worksheet_Activate()
Dim a, i As Long, w
Const Combo As String = "Size,Weight,Connection"
x = Split(Combo, ",")
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = 1
a = Sheets("Connections").Cells(1).CurrentRegion.Value
For i = 2 To UBound(a, 1)
If Not dic.exists(CStr(a(i, 1))) Then
Set dic(CStr(a(i, 1))) = CreateObject("Scripting.Dictionary")
dic(CStr(a(i, 1))).CompareMode = 1
End If
If Not dic(CStr(a(i, 1))).exists(CStr(a(i, 2))) Then
Set dic(CStr(a(i, 1)))(CStr(a(i, 2))) = CreateObject("Scripting.Dictionary")
dic(CStr(a(i, 1)))(CStr(a(i, 2))).CompareMode = 1
End If
If Not dic(CStr(a(i, 1)))(CStr(a(i, 2))).exists(CStr(a(i, 3))) Then
ReDim w(1 To 2, 1 To 1)
Else
w = dic(CStr(a(i, 1)))(CStr(a(i, 2)))(CStr(a(i, 3)))
ReDim Preserve w(1 To 2, 1 To UBound(w, 2) + 1)
End If
w(1, UBound(w, 2)) = a(i, 4)
w(2, UBound(w, 2)) = i
dic(CStr(a(i, 1)))(CStr(a(i, 2)))(CStr(a(i, 3))) = w
Next
With Me.ComboBoxConnectionBrand
.ListFillRange = ""
.List = dic.keys
End With
End Sub
Private Sub ComboBoxConnectionBrand_Change()
ClearCombo 0
If Me.ComboBoxConnectionBrand.ListIndex > -1 Then
Me.OLEObjects("ComboBoxsize").Object.List = dic(Me.ComboBoxConnectionBrand.Value).keys
End If
End Sub
Private Sub ComboBoxSize_Change()
ClearCombo 1
If Me.ComboBoxSize.ListIndex > -1 Then
Me.OLEObjects("ComboBoxWeight").Object.List = _
dic(Me.ComboBoxConnectionBrand.Value)(Me.ComboBoxSize.Value).keys
End If
End Sub
Private Sub ComboBoxWeight_Change()
ClearCombo 2
If Me.ComboBoxWeight.ListIndex > -1 Then
Me.OLEObjects("ComboBoxConnection").Object.Column = _
dic(Me.ComboBoxConnectionBrand.Value)(Me.ComboBoxSize.Value)(Me.ComboBoxWeight.Value)
End If
End Sub
Private Sub ClearCombo(s As Long)
Dim i As Long
For i = s To UBound(x)
Me.OLEObjects("Combobox" & x(i)).Object.Clear
Next
End Sub
Bookmarks