6

当表单关闭时,我正在尝试“重置”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

先谢谢大家了

4

6 回答 6

5

如果您只想清除选择(因为您正在使用隐藏,而不是卸载),请使用:

me.listbox1.value = ""

如果是多选列表框,则需要使用:

Me.listbox1.MultiSelect = fmMultiSelectSingle
Me.listbox1.Value = ""
Me.listbox1.MultiSelect = fmMultiSelectMulti

这将通过将其设置为仅单选然后清除选择,然后再次将功能设置为多选来清除选择。

如果要清除整个列表框(您选择的选项),请使用:

Me.listbox1.clear
于 2014-01-10T23:34:23.497 回答
1

尝试使用此代码清除 VBA 中的列表框

Private Sub clearListBox()
    Dim iCount As Integer

    For iCount = 0 To Me!ListBox1.ListCount
        Me!ListBox1.Selected(iCount) = False
    Next iCount
End Sub
于 2014-02-20T12:58:58.283 回答
1

要重置列表框中选择的明显项目,请尝试:

ListBox1.ListIndex = -1
ListBox2.ListIndex = -1

之后列表框控件中将没有明显的项目。

于 2014-09-15T21:36:17.370 回答
1

你可以使用

Private Sub clearListBox()
 'Clears the listbox
    Do Until ListBox1.ListCount = 0
        Me!ListBox1.RemoveItem(0)
    Loop
End Sub
于 2016-07-13T15:56:31.303 回答
0

隐藏和显示没有效果。如果您想使用“蛮力”,请使用卸载然后加载,但它会重置所有内容(不仅仅是单选按钮)并且会消耗内存(好吧,如果您的表单不包含数千个组件并且您的计算机是最新的等等等等会很好的)

做你想做的另一种方法是简单地运行所有单选按钮并取消选中它们

于 2013-09-06T09:39:02.253 回答
0

采用 LBPLC 的巧妙技术,这是一个适用于所有情况的单一解决方案:

Sub ListBox1_Reset()
    Dim SaveMultSelectMode As Integer
    
    With Me.ListBox1
        SaveMultSelectMode = .MultiSelect
        .MultiSelect = fmMultiSelectSingle
        .Value = ""
        .MultiSelect = SaveMultSelectMode
    End With
End Sub

但请注意,如果从 ListBox 控件的 VBA Change 事件中调用,这将不起作用。这可能是由于 Excel 的 ListBox 更改事件代码在处理过程中冻结了 MultiSelect 属性的有效状态,以防止其自身处理的不稳定条件。

于 2022-01-27T19:51:20.760 回答