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

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 に答える