问题“381”与范围VBA
我有以下代码填充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
这是我得到的
然后出现错误信息,如何做到这一点的工作也与一个单元格?
编辑:解决scheme感谢@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
出于与@Jason_Walker指出的相同的原因,如果你的variant
是一个数组,你可以使用IsArray
来检查它。 如果不是,可以将其作为单个项目添加
If IsArray(vList) Then Me.ListBox1.List = vList Else Me.ListBox1.AddItem = vList End if
更新
为了完整性,@Jason_Walker的理由是:
“任何时候这个变种都会被一个有多个值的范围填充,它会自动创build一个二维数组,这个二维数组应该填充列表框,而不会有任何问题。只有一个值在范围内“
任何时候变体都被一个具有多个值的范围填充,它会自动创build一个二维数组。
二维数组应填充列表框没有问题。
如果范围中只有一个值,则数组不是二维数组,因此您可能必须手动重新设置变体
如果数组只有一个值,则可能需要testing该数组
如果只有一个值,那么
Redim vList(1 to 1, 1 to 1) vList(1,1) = ws.Range("D2:" & lastCell).Value
列表框应该能够在这一点上采取变体