实例需求:用户窗体中有两个控件
- 列表框:ListBox1,支持多选
- 按钮:CommandButton1
现在需要记录用户在列表框中选择顺序(不考虑选中后再次点击取消选中的操作),如下图所示。
Dim objDic As Object
Private Sub UserForm_Initialize()
Dim i As Long
For i = 1 To 10
Me.ListBox1.AddItem CStr(i)
Next
Set objDic = CreateObject("scripting.dictionary")
End Sub
Private Sub ListBox1_Change()
Dim i As Long, sKey As String
For i = 0 To ListBox1.ListCount - 1
sKey = ListBox1.List(i)
If ListBox1.Selected(i) Then
If Not objDic.exists(sKey) Then
objDic(sKey) = ""
End If
Else
If objDic.exists(sKey) Then
objDic.Remove sKey
End If
End If
Next i
End Sub
Private Sub CommandButton1_Click()
MsgBox Join(objDic.keys, ",")
End Sub
【代码解析】
第1行代码定义模块级别字典对象变量。
第2~8行代码为窗体的初始化代码。
第4~6行代码为ListBox1控件添加列表内容。
第7行代码将字典对象实例化。
第9~23行代码ListBox1控件的Change事件代码。
第11~22行代码循环变量ListBox1控件的列表中的条目。
第12行代码获取条目的内容。
第13行代码判断该条目是否被选中。
- 如果被选中,第14~16行代码将选中内容添加到字典对象中。
- 如果未被选中,第18~20行代码从字典对象中删除相关条目(如果存在的话)。
第24~25行代码为CommandButton1控件的点击事件代码。
第25行代码调用Join函数,将选中的条目组合为字符串,显示在消息窗口中。