发出范围为VBA的'381'

时间:2014-12-04 19:48:24

标签: excel vba excel-vba range

我有以下代码来填充ListBox

Function fillData()

    Dim vList As Variant
    Dim ws As Worksheet: Set ws = Worksheets(BD)

    With ws
        If (IsEmpty(.Range("D2").Value) = False) Then

            Dim lastCell As String: lastCell = "D" & .Range("D65536").End(xlUp).Row
            vList = ws.Range("D2:" & lastCell).Value


            Me.ListBox1.List = vList
        End If

        Me.ListBox1.ListIndex = -1

    End With

    Set vList = Nothing
    Set ws = Nothing
End Function

到目前为止一切运作良好......

enter image description here

但是当我只留下一行数据时会出现此错误:

enter image description here

我甚至用这个打印了我的范围:

MsgBox "the range is D2:" & celdaFin

这就是我得到的

enter image description here

然后出现错误信息,如何使用一个单元格来完成这项工作?


编辑:解决方案感谢@Jason和@tospig

Function fillData()

    Dim vList As Variant
    Dim ws As Worksheet: Set ws = Worksheets(BD)

    Me.ListBox1.Clear

    With ws
        If (IsEmpty(.Range("D2").Value) = False) Then

            vList = ws.Range("D2:D" & .Range("D65536").End(xlUp).Row).Value

            If IsArray(vList) Then
                Me.ListBox1.List = vList
            Else
                Me.ListBox1.AddItem (vList)
            End If


        End If

        Me.ListBox1.ListIndex = -1

    End With

    Set vList = Nothing
    Set ws = Nothing
End Function

2 个答案:

答案 0 :(得分:2)

只要变量由具有多个值的范围填充,它就会自动创建一个二维数组。

二维数组应该没有问题地填充列表框。

如果范围中只有一个值,则数组不是二维数组,因此您可能需要手动重新设置变量

如果数组只有一个值

,则可能需要测试它

如果它只是一个值,那么

Redim vList(1 to 1, 1 to 1)
vList(1,1) = ws.Range("D2:" & lastCell).Value

列表框应该能够在此时采用变体

答案 1 :(得分:1)

出于与@Jason_Walker指出的相同的原因,如果您的variant是一个数组,则可以使用IsArray进行检查。如果没有,您可以将其添加为单个项目

If IsArray(vList) Then
    Me.ListBox1.List = vList
Else
    Me.ListBox1.AddItem = vList
End if

<强>更新

为了完整起见,@ Jason_Walker的理由:

&#34;只要变量由具有多个值的范围填充,它就会自动创建一个二维数组。 二维数组应该没有问题地填充列表框。 如果范围中只有一个值,则数组不是二维数组&#34;