检测 Excel VBA ListBox 中的选择更改

Detect a selection change in Excel VBA ListBox

我需要检测何时在列表框中进行了选择更改,以便我可以在选择或取消选择项目时将值写入 sheet。

似乎没有捕获此事件的事件。不会触发 OnChange 或 OnClick。我尝试使用 OnMouseUp 事件,它确实在正确的时间触发,但似乎随后禁用了选择 - 因此事件触发,但列表框没有记录被选中行的状态变化。

您可以使用它来触发事件。

Private Sub ListBox1_Change()
    MsgBox "Something changed"
End Sub

将其放入表单代码中。

您确实应该使用 ListBox_Change 事件来捕获它。在进行任何更改后,您需要枚举项目并查看是否选择了它们来更新任何工作表数据

例如:

Private Sub ListBox1_Change()
    Dim wsTarget As Worksheet: Set wsTarget = Worksheets("Sheet1")
    Dim wsTargetRange As Range: Set wsTargetRange = wsTarget.Range("A1:A100")

    Dim i As Long, RowIndex As Long

    RowIndex = 1
    wsTargetRange.ClearContents

    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            wsTargetRange.Item(RowIndex) = ListBox1.List(i)
            RowIndex = RowIndex + 1
        End If
    Next
End Sub