检测 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
我需要检测何时在列表框中进行了选择更改,以便我可以在选择或取消选择项目时将值写入 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