2013-02-11 46 views
1

我在VBA(Excel)中的MultiSelect ListBox中遇到問題。我希望用戶在列表框中選擇幾個選項,但他同時需要能夠切換窗口,以查找另一個程序中的選項。用戶切換窗口並返回到Excel時會出現問題。當他選擇一個選項時,那個在切換窗口之前被選作最後一個選項的選項會改變狀態(如果最後一個動作是選擇,則選項被取消選擇;如果最後一個動作未被選擇,則選擇該選項)。MultiSelect ListBox在Excel中切換窗口時會改變選項

example

我選擇A和B我切換窗口,然後返回到Excel。我點擊D並且B被取消選擇(在切換窗口之前最後選擇的選項)。這對用戶來說確實令人困惑。

任何人都知道這個問題的原因是什麼?有沒有辦法來解決這個問題?

所有列表框代碼:

Private Sub Worksheet_Activate() 

    Worksheets(1).ListBox1.Clear 

    ile = Worksheets(2).Range("b1").Value 

    For i = 1 To ile 
    Worksheets(1).ListBox1.AddItem (Worksheets(2).Range("b" + CStr(i + 2))) 
    Next i 

End Sub 


Private Sub ListBox1_GotFocus() 

    Application.ScreenUpdating = False 

    Range("a1").Select 

End Sub 

聚焦消失,但問題是不固定的

http://imgur.com/Flzpq6N

+1

當窗口或列表框被關注時,是否有任何代碼被寫入? – shahkalpesh 2013-02-11 13:05:49

+0

是否真的被取消選中,還是隻是突出顯示是錯誤的? – SeanC 2013-02-11 14:50:00

+0

在shahkalpesh 有代碼: 私人小組ListBox1_GotFocus() Application.ScreenUpdating =假 範圍(「A1」)選擇 結束小組 重點消失,但問題是不固定的 |在肖恩·柴郡 突出顯示的選項是真的選中,所以突出顯示是正確的。 – 2013-02-11 17:18:39

回答

0

Excel中的另一怪異的行爲就在那裏

你可以存儲在用戶的選擇某些工作表的一些不明顯的範圍,您不太可能使用(如表3),因此當它退出時焦點,它不會忘記 選擇什麼

Private Sub ListBox1_Change() 
    Dim i As Long, ii As Long 
    With Sheet3.[ObscureRange] 
     For i = 0 To ListBox1.listCount - 1 
      If ListBox1.Selected(i) = False Then 
      For ii = 1 To 250 
       If ListBox1.List(i) = .Offset(ii, 0) Then _ 
       .Offset(ii, 0).Delete xlShiftUp 
      If "" = .Offset(ii, 0) Then Exit For 
      Next 
      Else 
      For ii = 1 To 250 
       If XcludeList(ListBox1.List(i)) = False Then _ 
       If "" = .Offset(ii, 0) Then _ 
       .Offset(ii, 0) = ListBox1.List(i): Exit For 
      Next 
      End If 
     Next 
    End With 
End Sub 

XcludeList子

Function XcludeList(strVal As String) As Boolean 
    Dim i As Long 
    With Sheet3.[ObscureRange] 
    For i = 1 To 250 
     If strVal = .Offset(i, 0) Then XcludeList = True: Exit For 
     If .Offset(i, 0).Value = "" Then XcludeList = False: Exit For 
    Next 
    End With 
End Function 

的這另一個優點是用戶關閉用戶窗體後,如果你認爲這是一種,它仍然記得選擇優點:D

+0

它不管理我的expation :( 我想我的直接解決方案 – 2013-02-12 21:10:11

+0

Im out of workarounds for this :( – forums 2013-02-13 01:38:58