如何在VBA中动态生成和填充列表框?

时间:2019-06-24 14:28:08

标签: excel vba listbox populate

我正在尝试动态生成列表框(当前在UserForm中)(取决于源工作表中使用的列),并使用那些所属列的条目填充它们。

例如:

  • 列A具有以下条目(每行一个):苹果,香蕉,桃子

  • 列B具有:蓝色,绿色,红色

UserForm将生成两个列表框(一个用于A列,一个用于B列),并使用这些列的相应条目填充它们。

我尝试遍历列表框,但由于无法弄清楚如何正确地获取语法,因此不断出现错误。变量Lastrow为我提供了一列中非空单元格的数量,并且可以正常运行(未显示代码,以便更好地查看相关代码。

我是这样生成Listbox的:

Dim i As Integer
For i = 1 To 21
    Set LstBx = UserForm1.Controls.Add("Forms.Listbox.1", Name:="Listbox" & i)
Next i

对我来说,填充列表框似乎更困难:

Dim i As Integer
Dim LB As String
Dim cell As Range

For i = 1 To 21
For Each cell In SourceSheet.Range(Cells(1, i), Cells(LastRow, i)).Cells
    LB = "Listbox" + i
    LB.AddItem cell.Value
Next cell

以下内容结合了世代和人口,是我要修复的实际代码:

Dim i As Integer
Dim LB As String
Dim cell As Range

For i = 1 To 21

'Generate
Set LstBx = UserForm1.Controls.Add("Forms.Listbox.1", Name:="Listbox" & i)

'Populate
For Each cell In SourceSheet.Range(Cells(1, i), Cells(LastRow, i)).Cells
    LB = "Listbox" + i

    'the following is the crucial part I am losing hope on:
    'It seems that it is not possible to address Listboxes this way but i cant find another way:
    LB.AddItem cell.Value

Next cell

我期望根据列的动态数量生成和填充ListBoxes。但是我特别努力在循环时将项目添加到正确的ListBox中。最后,我的目标只是将有关动态列和行范围的所有列和相应条目转移到列表框中。

1 个答案:

答案 0 :(得分:0)

您可以像这样通过名称引用列表框:

Me.Controls("Listbox" & i).addItem cell.value

在这种情况下,我是用户表单。