当表单关闭时,我试图在 Excel VBA 中“重置”列表框。目前,当我使用 userform1.hide 函数时,表单消失了,但是当我使用 .show 函数再次打开它时,它仍然包含以前的选择。作为对此相对较新的人,有人可以提供帮助吗?
列表框的代码如下:
Sub CommandButton1_Click()
'Filter by Country
Dim item As Long, dict As Object
Dim wsData As Worksheet
Set wsData = Sheets("TPID")
Set dict = CreateObject("Scripting.Dictionary")
With ListBox1
For item = 0 To .ListCount - 1
If .Selected(item) Then dict(.List(item)) = Empty
Next item
End With
With wsData.ListObjects("Table_ExternalData_1").Range
.AutoFilter Field:=1
If dict.Count Then _
.AutoFilter Field:=1, criteria1:=dict.keys, Operator:=xlFilterValues
End With
'Filter by Continent
Dim item1 As Long, dict1 As Object
Dim wsData1 As Worksheet
Set wsData1 = Sheets("TPID")
Set dict1 = CreateObject("Scripting.Dictionary")
With ListBox2
For item1 = 0 To .ListCount - 1
If .Selected(item1) Then dict1(.List(item1)) = Empty
Next item1
End With
With wsData1.ListObjects("Table_ExternalData_1").Range
.AutoFilter Field:=4
If dict1.Count Then _
.AutoFilter Field:=4, criteria1:=dict1.keys, Operator:=xlFilterValues
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
提前谢谢大家,
如果您只想清除选择(因为您使用的是隐藏,而不是卸载),则使用:
me.listbox1.value = ""
Run Code Online (Sandbox Code Playgroud)
如果是多选列表框,则需要使用:
Me.listbox1.MultiSelect = fmMultiSelectSingle
Me.listbox1.Value = ""
Me.listbox1.MultiSelect = fmMultiSelectMulti
Run Code Online (Sandbox Code Playgroud)
这将通过将其设置为仅单选然后清除选择,然后再次将功能设置为多选来清除选择。
如果您想清除整个列表框(您选择的选项),请使用:
Me.listbox1.clear
Run Code Online (Sandbox Code Playgroud)
隐藏和显示没有效果。如果您想使用“暴力”,请使用卸载然后加载,但它会重置所有内容(不仅仅是单选按钮)并且会消耗内存(好吧,如果您的表单不包含数千个组件并且您的计算机是最新的)等等,不过没关系)
做你想做的事情的另一种方法是简单地浏览所有单选按钮并取消选中它们