如何在 VBA 中将所有项目选入列表框(多选)
How to get all item selected into ListBox ( Multiple Selection ) in VBA
我想select来自列表框的多个数据
下面的代码适用于单选:0 -fmMultiSelectSingle
Private Sub ListBox1_Click()
Dim Msg As String
Dim i As Integer
Msg = "You selected:" & vbNewLine
For i = 1 To ListBox1.ListCount
If ListBox1.Selected(i) Then
Msg = Msg & ListBox1.List(i) & vbNewLine
End If
Next i
MsgBox Msg
ListBox1.Selected(0) = False
End Sub
消息框向我显示所选项目,但如果我将多选选项切换为:
1 - fmMultiSelectMulti
或 2 - fmMultiSelectExtended
,前面的代码不起作用:消息框不显示任何内容。
我是不是做错了什么?
事件应该是_Change
而不是_Click
,只要它没有进入它,在fmMultiSelectExtended
的情况下由于一些奇怪的原因。或者尝试 VBE 中的其他 built-in 事件,可从下拉列表中获得:
Private Sub ListBox1_Change()
Dim myMsg As String
Dim i As Long
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
myMsg = myMsg & ListBox1.List(i)
End If
Next i
Debug.Print myMsg
End Sub
考虑一下这个事实,如果您 select 3 个值彼此相继,则每次只有 1 个 selected 值。因此,您将立即得到 3 组不同的数据 window。像这样:
为此ListBox
:
以下代码将所选项目的所有值存储在列表框中
Public Function listASIN() As String
Dim ctl As Control
Dim strASIN As String
Set ctl = Me!lstASIN
strASIN = ""
' Now select what records from listbox
If ctl.ItemsSelected.Count > 0 Then
i = 1
For Each varItem In ctl.ItemsSelected
strASIN = strASIN & ctl.ItemData(varItem) & ","
i = i + 1
Next varItem
Else
Exit Function
End If
'Remove Last "," from ASIN list
strASIN = Left(strASIN, Len(strASIN) - 1)
listASIN = strASIN
End Function
我想select来自列表框的多个数据
下面的代码适用于单选:0 -fmMultiSelectSingle
Private Sub ListBox1_Click()
Dim Msg As String
Dim i As Integer
Msg = "You selected:" & vbNewLine
For i = 1 To ListBox1.ListCount
If ListBox1.Selected(i) Then
Msg = Msg & ListBox1.List(i) & vbNewLine
End If
Next i
MsgBox Msg
ListBox1.Selected(0) = False
End Sub
消息框向我显示所选项目,但如果我将多选选项切换为:
1 - fmMultiSelectMulti
或 2 - fmMultiSelectExtended
,前面的代码不起作用:消息框不显示任何内容。
我是不是做错了什么?
事件应该是_Change
而不是_Click
,只要它没有进入它,在fmMultiSelectExtended
的情况下由于一些奇怪的原因。或者尝试 VBE 中的其他 built-in 事件,可从下拉列表中获得:
Private Sub ListBox1_Change()
Dim myMsg As String
Dim i As Long
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
myMsg = myMsg & ListBox1.List(i)
End If
Next i
Debug.Print myMsg
End Sub
考虑一下这个事实,如果您 select 3 个值彼此相继,则每次只有 1 个 selected 值。因此,您将立即得到 3 组不同的数据 window。像这样:
为此ListBox
:
以下代码将所选项目的所有值存储在列表框中
Public Function listASIN() As String
Dim ctl As Control
Dim strASIN As String
Set ctl = Me!lstASIN
strASIN = ""
' Now select what records from listbox
If ctl.ItemsSelected.Count > 0 Then
i = 1
For Each varItem In ctl.ItemsSelected
strASIN = strASIN & ctl.ItemData(varItem) & ","
i = i + 1
Next varItem
Else
Exit Function
End If
'Remove Last "," from ASIN list
strASIN = Left(strASIN, Len(strASIN) - 1)
listASIN = strASIN
End Function