我有以下函数,我用它来填充一个userform列表框,其中包含数组中的数据:
Activity
我的列表框包含两列,其中包含以下属性:
问题
数组中的数据具有ID列和lastname列。我不希望用户看到ID列,所以我在表单中将列宽设置为0。
当我导入包含多行的数据时,数据会按预期显示在列表框中。
但是,当数组只包含一行数据时,列表框显示为空白!
我已经尝试删除上图中的列宽,当我这样做并重新导入一行数据时,我将ID和姓氏堆叠在一起。但是,当然这不是我想要的结果。
我甚至尝试用Function PopulateListboxWithArray(lstbox As MSForms.ListBox, var As Variant)
With lstbox
If Not IsEmpty(var) Then
.Clear
.list = Application.Transpose(var)
.ListIndex = -1
End If
End With
End Function
替换.list = Application.Transpose(var)
无效。
我在这里做错了什么,或者有更好的方法来填充列表框?
欢呼声
答案 0 :(得分:0)
我在这篇文章中找到了答案:Adding item in listbox with multiple columns
我需要使用.List
属性我的函数现在看起来像这样:
Function PopulateListboxWithArray(lstbox As MSForms.ListBox, var As Variant)
With lstbox
If Not IsEmpty(var) Then
.Clear
If UBound(var, 2) > 0 Then
.list = Application.Transpose(var)
Else
.AddItem var(0, 0)
.list(.ListCount - 1, 1) = var(1, 0)
End If
End If
End With
End Function
答案 1 :(得分:0)
修改以添加更多"背景"
不太清楚你为什么要使用Application.Transpose()
With lstbox
If Not IsEmpty(var) Then
.Clear
If UBound(var, 1) = 1 Then
.AddItem
.List(0, 0) = var(1, 1)
.List(0, 1) = var(1, 2)
Else
' .List = Application.Transpose(var)
.List = var
End If
.ListIndex = -1
End If
End With
我以下列方式填充var
:
Private Sub UserForm_Initialize()
Dim var As Variant
With Worksheets("LB") '<--| change "LB" to your actual sheet name
var = .Range("B1", .Cells(.rows.Count, "A").End(xlUp)).Value '<--| populate var with columns "A:B" cells values from row 1 down to column "A" last non empty row
End With
With Me.ListBox1
.ColumnCount = 2 '<--| set listbox columns count
.ColumnWidths = "0;144" '<--| set listbox columns width
End With
PopulateListboxWithArray Me.ListBox1, var
End Sub