Excel VBA 用户窗体组合框 - 加载多列值
Excel VBA Userform Combobox - Load Multiple Columns Values
我正在使用此代码加载列 C
中已用范围的值。这工作正常,但是我还需要在组合框中的 E
和 G
列中加载值,以“-”分隔,因此例如每个组合框条目将显示为 "Row 1 Col C value - Row 1 Col E value - Row 1 Col G value"
。
Private Sub UserForm_Initialize()
Dim lastrow As Long
Dim ws As Worksheet
ws = mysheet
lastrow = ws.Columns("C").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
tag_combo.List = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "C" & lastrow).Value2
End If
End Sub
示例调用连接列值
尽可能接近原始 post 您可以将所有值读入一个基于 1 的 2 维临时数组,通过 &
加入第 1、第 3 和第 5 列值并分配它们回到组合框的 .List
属性:
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
Dim lastrow As Long, i As Long
lastrow = ws.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim v As Variant
v = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "G" & lastrow).Value2
For i = LBound(v) To UBound(v) ' join column values C, E, G
v(i, 1) = v(i, 1) & " - " & v(i, 3) & " - " & v(i, 5)
Next i
ReDim Preserve v(1 to Ubound(v), 1 to 1) ' redimension temporary array to 1 column
ComboBox1.List = v ' assign array back to .List property
End Sub
由于评论中的问题需要进一步说明
将范围数据(例如 C2:G4711
)分配给基于 1 的二维变体数组后 v
您现在必须循环遍历基于 1 的数组数据,其中
LBound(v)
总是从 "row" 1
开始,在一个基于 1 的数组(所谓的下边界)和
UBound(v)
returns 上限,例如4710
(从第二行开始=4711 - 2 + 1) "rows";
现在您通过 "column" 索引 [=16] 引用原始范围内的列 C
数据=] 变体数组,即 v(i, 1)
,到 E
,通过索引 3
: v(i, 3)
,到 G
通过索引 5
:v(i, 5)
。上面的示例 join 数组 column 中的第一个、第三个和第五个值通过 &
连接器分配结果字符串返回到第一个数组列,从而(覆盖)写入范围列 C
中已读入的数据。
最后,您必须将原来的 5 个数组列重新调整为只有一个,以表示现在由 " - "
连接的所需数据行。
我正在使用此代码加载列 C
中已用范围的值。这工作正常,但是我还需要在组合框中的 E
和 G
列中加载值,以“-”分隔,因此例如每个组合框条目将显示为 "Row 1 Col C value - Row 1 Col E value - Row 1 Col G value"
。
Private Sub UserForm_Initialize()
Dim lastrow As Long
Dim ws As Worksheet
ws = mysheet
lastrow = ws.Columns("C").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
tag_combo.List = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "C" & lastrow).Value2
End If
End Sub
示例调用连接列值
尽可能接近原始 post 您可以将所有值读入一个基于 1 的 2 维临时数组,通过 &
加入第 1、第 3 和第 5 列值并分配它们回到组合框的 .List
属性:
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
Dim lastrow As Long, i As Long
lastrow = ws.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim v As Variant
v = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "G" & lastrow).Value2
For i = LBound(v) To UBound(v) ' join column values C, E, G
v(i, 1) = v(i, 1) & " - " & v(i, 3) & " - " & v(i, 5)
Next i
ReDim Preserve v(1 to Ubound(v), 1 to 1) ' redimension temporary array to 1 column
ComboBox1.List = v ' assign array back to .List property
End Sub
由于评论中的问题需要进一步说明
将范围数据(例如 C2:G4711
)分配给基于 1 的二维变体数组后 v
您现在必须循环遍历基于 1 的数组数据,其中
LBound(v)
总是从 "row"1
开始,在一个基于 1 的数组(所谓的下边界)和UBound(v)
returns 上限,例如4710
(从第二行开始=4711 - 2 + 1) "rows";
现在您通过 "column" 索引 [=16] 引用原始范围内的列 C
数据=] 变体数组,即 v(i, 1)
,到 E
,通过索引 3
: v(i, 3)
,到 G
通过索引 5
:v(i, 5)
。上面的示例 join 数组 column 中的第一个、第三个和第五个值通过 &
连接器分配结果字符串返回到第一个数组列,从而(覆盖)写入范围列 C
中已读入的数据。
最后,您必须将原来的 5 个数组列重新调整为只有一个,以表示现在由 " - "
连接的所需数据行。