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

Excel VBA Userform Combobox - Load Multiple Columns Values

我正在使用此代码加载列 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

示例调用连接列值

尽可能接近原始 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 通过索引 5v(i, 5)。上面的示例 join 数组 column 中的第一个、第三个和第五个值通过 & 连接器分配结果字符串返回到第一个数组列,从而(覆盖)写入范围列 C 中已读入的数据。

最后,您必须将原来的 5 个数组列重新调整为只有一个,以表示现在由 " - " 连接的所需数据行。