用户窗体列表框填充范围

有没有什么办法可以通过单元格范围填充用户表单中的列表框或其他function?

我想把我的每个选定的列放入1个列表框中,如:

这里

例如A2:U100没有为每一列创build新的列表框?

现在我这样做:

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 

所以你确实需要一个带有多列的列表框,像这样的东西应该有所帮助:

 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 

没有testing的列表框,但这里是我如何填写一个logging集的结果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方法将新条目添加到列表框,然后通过访问List元素来填充它

假设我正在阅读你的问题,这应该添加一个列,你有一个列表框中的列数。

 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控件的列计数属性将无法工作:)

Interesting Posts