2016-01-28 221 views
0

我正在運行一個有3個列表框的用戶。我有BoxA_Click(),BoxB_Click每個潛艇,當執行時選擇一張單元格。如果我在BoxA中單擊一個值,宏將執行並選中單元格。然後,如果我在BoxB中單擊一個值,宏執行並找到一個不同的單元格。問題是,當我點擊BoxA時,如果選擇已經選擇的值,那麼BoxA_Click()宏將不會執行,因爲我沒有在技術上改變該特定框中的選擇。當選擇其他列表框時取消選擇列表框

我的嘗試解決方案是創建一個框架,FrameMove,我已經把所有3個列表框。我試圖寫一些東西,當單擊一個方框時將取消選擇其他2個方框。

Private Sub BoxA_Click() 
    GoToCell(BoxA.Value) 
    Dim C As MSForms.Control 
    For Each C In FrameMove.Controls 
     If TypeOf C Is MSForms.ListBox Then 'C.ListIndex = -1 ??? 
    Next C 
End Sub 

我目前正在循環幀內的所有控件,因爲我不確定如何通過特定的ListBoxes循環。有一種方法可以使這項工作在選擇一個列表框時取消選擇所有其他列表框?

+0

難道你剛剛設置索引爲-1在子的末尾,一旦你已經移動到單元格?這將確保當您再次選擇下拉菜單時,您將不得不選擇該值。 – Sorceri

+0

這似乎沒有做任何事情。我假設宏執行的是點擊,這意味着實際選擇會立即發生,但仍然在_Click效果運行之後,所以它只是保持選中狀態。 – teepee

+0

將您的重置列表框代碼放入退出事件(BoxA_Exit)中。 – Jules

回答

0

添加一行代碼以在每個Listbox單擊事件結束時取消選擇所選項目。

BoxA.Selected(0) = False 

並且如果列表框是多重選擇,則通過它們進行循環。

For i = 0 to BoxA.ListCount - 1 
    BoxA.Selected(i) = False 
next i