我有以下代码来填充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
到目前为止一切运作良好......
但是当我只留下一行数据时会出现此错误:
我甚至用这个打印了我的范围:
MsgBox "the range is D2:" & celdaFin
这就是我得到的
然后出现错误信息,如何使用一个单元格来完成这项工作?
编辑:解决方案感谢@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
答案 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;