从多选列表框中检索数据时允许空输入

时间:2017-04-27 17:08:25

标签: excel vba listbox multi-select

我正在尝试创建一个简单的基于工作表的表单,该表单将选择的数据从Excel工作簿中的另一个表中提取。这是我第一次搞乱Visual Basic和ActiveX控件,我没有太多的编程经验,但是有很多谷歌搜索我到目前为止已经设法搞砸了一些。

有问题的部分:我有几个多选框,只需点击一下按钮,就可以使用以下代码将数据推送到电子表格中:

Private Sub CommandButton1_Click()
    Dim I As Long
        Range("A10").Select
        Range(Selection, Selection.End(xlToRight)).ClearContents
    With Me.ListBox1
        For I = 0 To .ListCount - 1
            If .Selected(I) Then
                Flg= True
                txt = txt & "," & .List(I)
            End If
        Next
    End With
    If Flg Then
        With Sheets("Sheet1")
            .Range("A10").Value = Mid$(txt, 2)
        End With
    End If
    txt=""
'Repeat for each listbox'
End Sub

只要用户在每个列表框中选择了至少一个项目,就可以正常工作来提取数据,从那里我可以做我需要的工作。但我不想要求用户在每个框中单击(也就是说,如果他们不想在该框中选择某些内容,我想我可以强制他们单击一个空选择,但它会更容易让他们根本不选择任何东西)。但是(可以理解)当在给定的框中没有选择任何内容时,上面粘贴的代码返回运行时错误1004:没有选择数据来解析。

如何允许用户在框中不做任何选择,并且在检索数据时让代码将关联的单元格留空?

1 个答案:

答案 0 :(得分:0)

哇,经过几天的观察,我终于找到了它。这是对我有用的代码:

Private Sub ListBox1_LostFocus()
    Dim listItems As String, i As Long

    With ListBox1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then listItems = listItems & .List(i) & ", "
        Next i
    End With

    If Len(listItems) > 0 Then
        Range("A2") = Left(listItems, Len(listItems) - 2)
    Else
        Range("A2") = ""
    End If

End Sub

它来自这个页面:https://www.mrexcel.com/forum/excel-questions/584437-write-selections-excel-listbox-cell.html ...感谢'Marcelo Branco'在7年前提供这个答案!

编辑 - 这真的回答了我所拥有的一个单独的问题(关于自动检索数据),但它似乎也适用于这里的大问题,因为当没有选择任何内容时,目标单元格是空白的。