Excel VBA用户窗体组合框-加载多列值

时间:2019-07-04 17:17:16

标签: excel vba userform

我正在使用此代码在C列中加载已用范围的值。这可以正常工作,但是我还需要在组合框内的列EG中加载由“-”分隔的值,例如,每个组合框条目都将读取"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

1 个答案:

答案 0 :(得分:1)

示例呼叫合并列值

尽可能接近原始帖子,您可以将所有值读入基于1的2维临时数组,并通过&连接第1,第3和第5列值,并将它们分配回组合框的{{ 1}}属性:

.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 )分配给基于2维的基于1的变量数组C2:G4711之后,您现在必须遍历基于1的数组数据,其中

  • v总是从“ row” LBound(v)开始于基于1的数组(所谓的下边界)中,并且
  • 1返回上限,例如UBound(v)(从第二行开始,= 4711-2-1) “行”

现在,您通过变量数组的“列” 索引4710引用原始范围内的列 C 数据,即{{ 1}},通过索引1 v(i, 1) E,通过索引{{1}到 3 }:v(i, 3)。上面的示例通过G连接器连接数组 column 项中的第1个,第3个和第5个值,并将结果字符串分配回第一个数组因此,该列将覆盖已读入范围列5的数据。

最终,您必须将原来的5个数组列重新分配为仅1个,以便表​​示现在通过v(i, 5)连接的所需数据行。