下拉框 将数组

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第51讲:对字典嵌套的理解及二级下拉菜单的制作.

在讲字典的时候,我反复说明,字典看视非常简单,由于它具有直达性可以省略去我们大量的循环查找代码,所以使用起来要特别留意很多用法和常规思路是不一致的,对于字典的理解:

1:键key、键值(或者较项)item 是非常重要的,key 一定是字符串,具有唯一性,item 可以为任何类型的数据.

2:keys 和items 是一维数组,他们的开始是从0开始到count-1结束。

3:再次理解字典的直达性,对于给定的键,可以直接得出键值不必循环查找.

今日我们利用字典的嵌套完成一个两级下拉菜单的制作,大家要认真理解,如下面的数据:

我要在一级菜单中实现A列的数值,在二级下拉菜单中实现对应于A列的B列的值,下面看我给出的代码:

Private Sub ComboBox1_Change()

ComboBox2.Clear

'二级下拉框对应的是第一级字典的键值为键的字典

ComboBox2.List = mydic(ComboBox1.Value).keys

End Sub

Private Sub UserForm_Activate() '第51讲 字典的嵌套的理解及二级下拉菜单的制作

'将数据装入数组

myarr = Range('a1').CurrentRegion.Value

Set mydic = CreateObject('Scripting.Dictionary')

For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

If Not mydic.Exists(strF) Then

'建立嵌套字典,第一重字典的键对应的键值为字典

Set mydicTemp = CreateObject('Scripting.Dictionary')

'注意下面的两种写法

'Set mydic.Item(strF) = mydicTemp

Set mydic(strF) = mydicTemp

End If

'注意下面的两种写法,嵌套字典的字典的键记入,键值为空

'mydic.Item(strF).Item(strS) = ''

mydic(strF)(strS) = ''

Next i

'一级下拉框对应的是第一级字典的键

ComboBox1.List = mydic.keys

End Sub

代码截图:

代码讲解:

1 上述代码利用了字典的嵌套,解决了两级下拉菜单的制作问题,在利用前要先加上一个窗体:

2 '将数据装入数组

myarr = Range('a1').CurrentRegion.Value

上述代码将源数据写入数组中备用

3 Set mydic = CreateObject('Scripting.Dictionary')

上述代码定义外层的字典.

4 For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

If Not mydic.Exists(strF) Then

'建立嵌套字典,第一重字典的键对应的键值为字典

Set mydicTemp = CreateObject('Scripting.Dictionary')

'注意下面的两种写法

'Set mydic.Item(strF) = mydicTemp

Set mydic(strF) = mydicTemp

End If

'注意下面的两种写法,嵌套字典的字典的键记入,键值为空

'mydic.Item(strF).Item(strS) = ''

mydic(strF)(strS) = ''

Next i

上述代码中利用FOR NEXT在数组中建立循环,当Not mydic.Exists(strF),将数据存入字典,键是strF ,键值是一个字典:mydicTemp,如果能够找到外层字典的键,那么将建立内层字典的,即: mydic(strF)(strS) =

(0)

相关推荐