gpt4 book ai didi

VBA Excel 用多列填充列表框

转载 作者:行者123 更新时间:2023-12-02 12:06:41 30 4
gpt4 key购买 nike

对于某些人来说,这可能是一个廉价的问题,但我对如何填充列表框完全感到困惑。

form with listbox

使用这一行我可以填充列表框,如下所示:
ListBox1.List = Sheets("Sheet1").Cells(1, 1).CurrentRegion.Value

Dim rngName As Range
Dim ws As Worksheet
Dim i As Integer
Set ws = Worksheets("Sheet1")
For i = 1 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Step 1
If ws.Cells(i, 1).Value <> vbNullString Then Me.ListBox1.AddItem
ws.Cells(i, 1).Value
Next i

form with listbox 1 column output

下面是我计划用于填充列表框的数据,并且是渐进式的。只有该列具有修复计数。
Data

有人请告诉我如何使用 FOR LOOP 填充适应多列和行的列表框,如上面的代码所示。任何帮助表示赞赏。谢谢。

最佳答案

方法

  1. 循环数组总是比循环范围更好 - 它快得多
  2. 使用单行创建变体数据字段数组甚至更快,而不是按照 Siddharth Rout 的建议重新定义预先声明的数组并将其填充到额外的循环中(尽管这是一个很好的方法:-) 注意:下面的代码基于上面评论中引用的他的方法,只是为了演示差异。
  3. 用数组填充ListBox1.List(方法相同,但方向相反)。

代码

Private Sub CommandButton1_Click()
' Purpose: fill listbox with range values after clicking on CommandButton1
' (code could be applied to UserForm_Initialize(), too)
' Note: based on @Siddharth-Rout 's proposal at https://stackoverflow.com/questions/10763310/how-to-populate-data-from-a-range-multiple-rows-and-columns-to-listbox-with-vb
' but creating a variant data field array directly from range in a one liner
' (instead of filling a redimensioned array with range values in a loop)
Dim ws As Worksheet
Dim rng As Range
Dim MyArray ' variant, receives one based 2-dim data field array
'~~> Change your sheetname here
Set ws = Sheets("Sheet1")

'~~> Set you relevant range here
Set rng = ws.Range("A1:C" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)

With Me.ListBox1
.Clear
.ColumnHeads = False
.ColumnCount = rng.Columns.Count

'~~> create a one based 2-dim datafield array
MyArray = rng

'~~> fill listbox with array values
.List = MyArray

'~~> Set the widths of the column here. Ex: For 5 Columns
'~~> Change as Applicable
.ColumnWidths = "50;50;50"
.TopIndex = 0
End With
End Sub

其他提示

  • 数组方法的另一个优点 - 它克服了使用 .AddItem 时只能10 列的内置限制方法。

  • 此外,请记住,列表框索引从零开始,因此,例如,您将获得第一个项目行(索引 0)的电子邮件地址(第 3 列,索引 2) ) 通过 ListBox1.List(0, 2),而数据字段数组自动变成基于 1 的 2 维数组。

  • 您不限于使用 .List 方法从列表框中获取信息,您可以使用 ListBox1.Column"或甚至从中创建一个新数组,即使只有一个项目,它仍然是一个 2 维对象(注意:Application.Transpose` 方法会将只有一行的 2 维数组重新调整为 1 -dim 数组)。

  • 最后一点:您可以通过 rng = ListBox1.List 轻松地将整个列表框再次转储回 Excel 工作表,但请注意定义正确的范围。

关于VBA Excel 用多列填充列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528558/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com