2013-09-06 2 views
2

양식을 닫을 때 Excel VBA에서 목록 상자를 '재설정'하려고합니다. 현재 userform1.hide 함수를 사용하면 양식이 사라지지만 .show 함수를 사용하여 다시 열면 이전 선택 항목이 남아 있습니다. 비교적 새로운 사람이 도움이 될 수 있습니까? 사전 모두에VBA의 목록 상자 선택 재설정

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 

감사합니다,

답변

0

숨기기와 쇼가 효과가 없습니다 다음과 같이리스트 박스

코드입니다. "brute force"를 사용하려면 unload를 사용하고 load를 사용합니다. 그러나 라디오 버튼뿐만 아니라 모든 것을 재설정하고 메모리를 소비합니다 (양식에 수천 개의 구성 요소가없고 컴퓨터가 최근 버전 인 경우). 등 등 그것은,

당신이 원하는 것은 모든 라디오 버튼을 통해 실행하고 당신은 숨기기를 사용으로 (ONLY 선택을 취소하려면 그들에게 모든

1

의 선택을 취소하는 것입니다 할 수있는 또 다른 방법)하지만 잘 될 것입니다 언로드)를 사용

me.listbox1.value = "" 

을 그것이 다중 선택 목록 상자 인 경우에는 사용할 필요가 :

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

이렇게하면 단일 선택으로 설정 한 다음 선택을 지우고 기능을 다중 선택으로 다시 설정하여 선택을 지 웁니다. 당신은 전체 목록 상자 (선택 옵션)을 삭제하려면

사용 :

Me.listbox1.clear 
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 
0

선택한 명백한 항목을 재설정하려면 목록 상자에서 다음을 시도하십시오.

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

이후 목록 상자 컨트롤에는 아무 것도 표시되지 않습니다.

0

당신은 사용할 수

Private Sub clearListBox() 
'Clears the listbox 
    Do Until ListBox1.ListCount = 0 
     Me!ListBox1.RemoveItem(0) 
    Loop 
End Sub