ListBox选项赋值报错:选中项赋值至单元格时返回FALSE
解决ListBox选中值赋值单元格返回FALSE的问题
嘿,你这段代码里的问题很明确——ListBox1.Selected(Item)这个语句根本不是用来获取选中项内容的!它的作用是判断某个索引对应的选项是否被选中,返回的是布尔值(选中就是True,没选中就是False),所以你把它赋值给单元格,自然得到FALSE啦。
给你分情况整理了正确的写法:
情况1:ListBox是单选模式(默认就是单选)
这是最常见的场景,直接获取选中项的文本或者值就行:
方式1:获取选中项的显示文本
Private Sub CommandButton2_Click() ' 先判断有没有选中项,防止没选时报错 If ListBox1.ListIndex <> -1 Then ActiveCell.Value = ListBox1.List(ListBox1.ListIndex) End If End Sub
方式2:直接用Value属性(更简洁)
如果你的ListBox没有特殊设置多列绑定,Value属性直接返回选中项的显示文本:
Private Sub CommandButton2_Click() If ListBox1.ListIndex <> -1 Then ActiveCell.Value = ListBox1.Value End If End Sub
情况2:ListBox是多选模式(MultiSelect属性设为1或2)
如果允许选多个选项,就得遍历所有项,把选中的内容拼接起来:
Private Sub CommandButton2_Click() Dim selectedContent As String Dim i As Integer selectedContent = "" ' 遍历ListBox里的每一项 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then ' 用逗号分隔选中的内容,你可以改成自己需要的分隔符 selectedContent = selectedContent & ListBox1.List(i) & ", " End If Next i ' 去掉最后多余的逗号和空格,再赋值给单元格 If Len(selectedContent) > 0 Then selectedContent = Left(selectedContent, Len(selectedContent) - 2) ActiveCell.Value = selectedContent End If End Sub
关键知识点提醒:
ListIndex:返回当前选中项的索引,没选中时是-1,用来判断是否有选中项List(index):根据索引获取对应项的显示文本Selected(index):这就是你之前用的,它只返回True/False,用来判断某一项是否被选中,不是获取内容的!
内容的提问来源于stack exchange,提问作者Leogreen
相关产品推荐
相关产品推荐

