VBA从Excel中的电子表格中的列表框中获取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA从Excel中的电子表格中的列表框中获取值相关的知识,希望对你有一定的参考价值。

我在Excel工作簿的Sheet1上有一个名为ListBox1的列表框。

每次用户选择列表中的一个项目时,我都需要将其名称复制到名为strLB的变量中。

所以,如果我有Value1,Value2,Value3,Value4并且用户选择了Value1和Value3,我需要我的strLB作为Value1,Value3。非常直截了当。

我尝试用事后做:

For i = 1 To ActiveSheet.ListBoxes("ListBox1").ListCount
    If ActiveSheet.ListBoxes("ListBox1").Selected(i) Then strLB = strLB & etc.etc.
Next i

但这非常慢(我的列表框中实际上有15k值)。这就是为什么我需要在用户完成输入后实时记录选择而不是循环。

当然,我还需要一种方法来检查用户是否删除了之前的选择。

希望你们能帮忙!

答案

不幸的是,MSForms列表框循环遍历列表项并检查其Selected属性是唯一的方法。但是,这是另一种选择。我在变量中存储/删除所选项目,你可以在一些远程单元格中执行此操作并跟踪它:)

Dim StrSelection As String

Private Sub ListBox1_Change()
    If ListBox1.Selected(ListBox1.ListIndex) Then
        If StrSelection = "" Then
            StrSelection = ListBox1.List(ListBox1.ListIndex)
        Else
            StrSelection = StrSelection & "," & ListBox1.List(ListBox1.ListIndex)
        End If
    Else
        StrSelection = Replace(StrSelection, "," & ListBox1.List(ListBox1.ListIndex), "")
    End If
End Sub
另一答案

接受的答案不会削减它,因为如果用户取消选择行,则列表不会相应地更新。

这是我的建议:

Private Sub CommandButton2_Click()

Dim lItem As Long

    For lItem = 0 To ListBox1.ListCount - 1

        If ListBox1.Selected(lItem) = True Then

            MsgBox(ListBox1.List(lItem))

        End If

    Next

End Sub

http://www.ozgrid.com/VBA/multi-select-listbox.htm提供

另一答案

要获取列表框中所选项的值,请使用以下内容。

对于单列ListBox:ListBox1.List(ListBox1.ListIndex)

对于Multi Column ListBox:ListBox1.Column(column_number, ListBox1.ListIndex)

这避免了循环并且非常有效。

另一答案

选择值:

worksheet name = ordls
form control list box name = DEPDB1

selectvalue = ordls.Shapes("DEPDB1").ControlFormat.List(ordls.Shapes("DEPDB1").ControlFormat.Value)

以上是关于VBA从Excel中的电子表格中的列表框中获取值的主要内容,如果未能解决你的问题,请参考以下文章

Excel中的VBA创建带有表格和签名的电子邮件

VBA Excel - 从 MS Access 将列名保存到电子表格

VBA复制行高?

使用VBA破解Excel电子表格密码

从访问 vba 中的多值组合框中获取值

Excel vba列表框多列多行从14个文本框