在Excel中切换窗口时,MultiSelect ListBox会改变选项

我在VBA(Excel)的MultiSelect列表框中遇到问题。 我想要一个用户在列表框中select几个选项,但他同时需要能够切换窗口,以在另一个程序中查找select。 用户切换窗口并返回到Excel时,会发生此问题。 当他select一个选项时,在切换窗口之前被选作最后一个选项的选项会改变状态(如果最后一个动作被select,则该选项被取消select;如果最后一个动作被取消select,则select该选项)。

例

我selectA和B.我切换窗口,然后返回到Excel。 我点击D和B取消select(切换窗口之前最后select的选项)。 这对用户来说确实很混乱。

任何人都知道这个问题的原因是什么? 有没有办法来解决这个问题?

所有ListBox代码:

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 

焦点消失,但问题没有解决

View post on imgur.com

excel的另一个奇怪的行为就在那里

您可以将用户select存储在某些您不太可能使用的工作表的某个模糊范围内(如工作表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 Sub

 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 

这样做的另一个好处是它仍然记得用户closures用户窗体后的select,如果你认为它是一个优点:D