|
确保“联动基础数据列数=ComboBox控件个数”即可正常实现N级联动
“类模块、字典”的相关知识均是我在这个论坛的各位版主和各位大神的教学帖中学到的,受益匪浅,在此多谢各位老师了!现把学习到的“类模块+字典”做了一个N级联动,实验成功,欣喜之余,把这个简单的程序分享给后来需要了解这方面知识的朋友们。。高手直接跳过吧,毕竟我只是学了点儿皮毛,程序比较粗糙,呵呵
主程序:
- Dim cbarr() As New cbc
- Private Sub UserForm_Initialize()
- Set zd = CreateObject("scripting.dictionary")
- sjarr = Cells(1, 1).CurrentRegion
- For i = 1 To UBound(sjarr)
- s = ""
- For j = 1 To UBound(sjarr, 2)
- s = s & sjarr(i, j) & "-"
- zd(Left(s, Len(s) - 1)) = "" '
- Next j
- Next i
- For Each zds In zd.keys
- If UBound(Split(zds, "-")) = 0 Then
- Me.ComboBox1.AddItem zds
- End If
- Next
- ReDim cbarr(1 To UBound(sjarr, 2))
- For i = 1 To UBound(sjarr, 2) - 1
- cbarr(i).st Me.Controls("ComboBox" & i), zd.keys, i
- Next i
- Set zd = Nothing
- End Sub
复制代码
类模块:
- Private WithEvents cb As ComboBox, n, zds
- Public Sub st(cbs, zdkeys, cbn)
- Set cb = cbs
- n = cbn
- zds = zdkeys
- End Sub
- Private Sub cb_Change()
- With UserForm1
- .Controls("ComboBox" & n + 1).Clear
- For i = 0 To UBound(zds)
- If UBound(Split(zds(i), "-")) = n Then
- s1 = ""
- s2 = ""
- For j = 0 To n - 1
- s1 = s1 & Split(zds(i), "-")(j) & "-"
- s2 = s2 & .Controls("ComboBox" & j + 1) & "-"
- Next j
- If s1 = s2 Then
- .Controls("ComboBox" & n + 1).AddItem Split(zds(i), "-")(n)
- End If
- End If
- Next i
复制代码
|
评分
-
4
查看全部评分
-
|