Excel VBA - 从数组中填充多列用户窗体列表框。当阵列仅具有1个项目
问题描述:
没有数据我有以下功能,即时通讯使用来填充从数组数据用户窗体列表框:Excel VBA - 从数组中填充多列用户窗体列表框。当阵列仅具有1个项目
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
我的列表框包含两列具有以下属性:
问题
在数组中的数据具有ID柱和LastName列。我不想让用户看到ID列,所以我在表单中将列宽设置为0。
当我导入具有多行的数据时,数据按预期显示在列表框中。
但是,当数组只包含一行数据时,列表框显示空白!
我已经尝试删除上图中的列宽,当我这样做并重新导入一行数据时,我得到ID和姓氏堆叠在另一个之上。但是,这不是我想要的结果。
我甚至试图用.list = var
代替.list = Application.Transpose(var)
无济于事。
我在这里做错了什么,还是有更好的方式来填充列表框?
欢呼
答
我已经找到了答案在这个岗位: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
答
编辑添加更多“背景”
不太确定你为什么使用应用程序n.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
您好,感谢响应。当多行数据返回时需要转置。我确实尝试了.list = var,但没有奏效。欢呼声 – Nick
@尼克,不客气。我添加了一些背景知道如何填充'var'并让它工作 – user3598756