1

VBA (Excel) の MultiSelect ListBox に問題があります。ユーザーに ListBox でいくつかのオプションを選択してもらいたいのですが、その間にウィンドウを切り替えて、別のプログラムで選択肢を検索できるようにする必要もあります。この問題は、ユーザーがウィンドウを切り替えて Excel に戻ったときに発生します。彼がオプションを選択すると、ウィンドウを切り替える前に最後に選択されたオプションが状態を変更します (最後のアクションが選択されていた場合、オプションは選択解除されます。最後のアクションが選択解除されていた場合、オプションは選択されます)。

例

A と B を選択します。ウィンドウを切り替えて、Excel に戻ります。Dをクリックすると、Bが選択解除されます(ウィンドウを切り替える前に最後に選択されたオプション)。ユーザーにとっては本当に混乱します。

誰でもこの問題の原因を知っていますか? これを修正する方法はありますか?

すべての 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

フォーカスが消えるが問題は解決しない

http://imgur.com/Flzpq6N

4

1 に答える 1

0

そこにあるExcelの別の奇妙な動作

ユーザーの選択を、使用する可能性が低いワークシートのあいまいな範囲 (sheet3 など) に保存できるため、フォーカスが外れても、選択されたものを忘れることはありません。

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

これのもう1つの利点は、ユーザーがユーザーフォームを閉じた後も選択が記憶されていることです。これを利点と考える場合:D

于 2013-02-12T03:46:44.333 に答える