【问题标题】:Allow null input when retrieving data from multiselect listbox从多选列表框检索数据时允许空输入
【发布时间】:2017-04-27 17:08:24
【问题描述】:

我正在尝试创建一个简单的基于工作表的表单,它将数据从选择中提取到 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:没有选择要解析的数据。

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

【问题讨论】:

    标签: excel vba listbox multi-select


    【解决方案1】:

    哇,看了几天终于找到了。这是对我有用的代码:

    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 年前提供了这个答案!

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

    【讨论】:

      猜你喜欢
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      相关资源
      最近更新 更多