Vba 用户表单列表框填充范围

Vba 用户表单列表框填充范围,vba,excel,controls,userform,Vba,Excel,Controls,Userform,是否有任何方法可以按单元格范围填充用户表单中的列表框或其他功能 我想将我选择的每一列放入1个列表框中,如下所示: 例如A2:U100,但不为每列创建新列表框 现在我这样做: ListBox1.List = Application.Worksheets("Můj_Ranking").Range("B2:B" & lastRw).Value ListBox2.List = Application.Worksheets("Můj_Ranking").Range("C2:C" & la

是否有任何方法可以按单元格范围填充用户表单中的列表框或其他功能

我想将我选择的每一列放入1个列表框中,如下所示:

例如A2:U100,但不为每列创建新列表框

现在我这样做:

ListBox1.List = Application.Worksheets("Můj_Ranking").Range("B2:B" & lastRw).Value
ListBox2.List = Application.Worksheets("Můj_Ranking").Range("C2:C" & lastRw).Value
ListBox3.List = Application.Worksheets("Můj_Ranking").Range("D2:D" & lastRw).Value
ListBox4.List = Application.Worksheets("Můj_Ranking").Range("E2:E" & lastRw).Value
ListBox5.List = Application.Worksheets("Můj_Ranking").Range("F2:F" & lastRw).Value
ListBox6.List = Application.Worksheets("Můj_Ranking").Range("G2:G" & lastRw).Value
ListBox7.List = Application.Worksheets("Můj_Ranking").Range("H2:H" & lastRw).Value
ListBox8.List = Application.Worksheets("Můj_Ranking").Range("I2:I" & lastRw).Value
ListBox9.List = Application.Worksheets("Můj_Ranking").Range("J2:J" & lastRw).Value
ListBox10.List = Application.Worksheets("Můj_Ranking").Range("K2:K" & lastRw).Value
ListBox11.List = Application.Worksheets("Můj_Ranking").Range("L2:L" & lastRw).Value

还没有测试Listbox,但下面是如何用记录集的结果填充Combobox

 Function Fill_Combobox(ByRef cbo As ComboBox, ByVal rs As ADODB.Recordset, ByVal colWidth As String)
    Dim aryColumnWidth() As String
    Dim i As Integer

    aryColumnWidth = Split(colWidth, ";")
    cbo.Clear
    cbo.ColumnCount = UBound(aryColumnWidth) + 1
    cbo.ColumnHeads = False
    cbo.ColumnWidths = colWidth

    Do Until rs.EOF
        With cbo
            .AddItem
            For i = 0 To UBound(aryColumnWidth)
                .List(.ListCount - 1, i) = rs.Fields(i)
            Next
        End With
        rs.MoveNext
    Loop
End Function 

它的工作原理应该与列表框类似。调用AddItem方法向列表框添加一个新条目,然后通过访问列表元素来填充它,因此您确实需要一个包含多列的列表框,如下所示应该会有所帮助:

With ListBox1
    .ColumnCount = 11
    .ColumnWidths = "50;50;50;50;50;50;50;50;50;50;50"
    .ColumnHeads = False
    .RowSource = "=Můj_Ranking!B2:L" & LastRw
    .MultiSelect = fmMultiSelectMulti
End With
或者如何在控件之间循环:

For i = 1 To 11
    With Application.Worksheets("Můj_Ranking")
         Controls("ListBox" & i).List = .Range(ColLet(i) & "2:" & ColLet(i) & lastRw).Value
    End With
Next i
对于大多数控件,您还具有
.RowSource
属性!;)

以及获取列的字母的函数:

Public Function ColLet(x As Integer) As String
With ActiveSheet.Columns(x)
    ColLet = Left(.Address(False, False), InStr(.Address(False, False), ":") - 1)
End With
End Function

假设我正确地阅读了您的问题,这应该会在单个列表框中添加一行,其中包含您拥有的列数

for i = 2 to lstRw
    With ListBox1
        .AddItem Application.Worksheets("Můj_Ranking").Range("B" & i).value
        .List(.ListCount - 1 ,1) = Application.Worksheets("Můj_Ranking").Range("C" & i).Value
        .List(.ListCount - 1 ,2) = Application.Worksheets("Můj_Ranking").Range("D" & i).Value

        'And so on for each column
        .List(.ListCount - 1 ,10) = Application.Worksheets("Můj_Ranking").Range("L" & i).Value
    End With
next i

请记住在您的用户窗体上编辑ListBox控件的列计数属性,因为它将不起作用:)

您好,谢谢,不幸的是,它将数字放在一列中。我想像谢谢你一样拥有它,我不想把它放在11个不同的列表框中,而是放在一个列表框中。我尝试过rowsource,但我也想使用lastRw…我不认为
lastRw
rowsource
是不兼容的。所以你想要一个有多列的控件?我也不这么认为。。我希望有st like。它确实是一个具有多个列的控件!因此,请测试编辑的第一部分!;)啊!我现在看到了。谢谢你,你真是帮了大忙:)