如何在VBA用户窗体ListBox中填充两个表格内容
VBA用户窗体ListBox显示横向并列的两个表格
原代码仅能在ListBox中展示"PL2_Steel"工作表里的单个18列表格(A8:R区域),要实现将第二个表格横向拼接在第一个表格之后(ListBox第19列对应第二个表格第1列),可按以下方式修改代码:
Sub spl2list() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("PL2_Steel") Dim lr As Long lr = sh.Cells(Rows.Count, 1).End(xlUp).End(xlUp).Row If lr = 7 Then lr = 8 ' 定义两个目标数据区域:第一个表格A8:R,第二个表格S8:AD(需根据实际列范围调整) Dim rng1 As Range, rng2 As Range Set rng1 = sh.Range("A8:R" & lr) Set rng2 = sh.Range("S8:AD" & lr) ' 将区域数据读取到数组中,提升处理效率 Dim arr1 As Variant, arr2 As Variant, arrCombined As Variant arr1 = rng1.Value arr2 = rng2.Value ' 初始化合并数组:行数与原表格一致,列数为两个表格列数之和 ReDim arrCombined(1 To UBound(arr1, 1), 1 To UBound(arr1, 2) + UBound(arr2, 2)) ' 循环填充合并数组,将两个表格的行数据横向拼接 Dim i As Long, j As Long For i = 1 To UBound(arr1, 1) ' 填充第一个表格的列 For j = 1 To UBound(arr1, 2) arrCombined(i, j) = arr1(i, j) Next j ' 填充第二个表格的列 For j = 1 To UBound(arr2, 2) arrCombined(i, UBound(arr1, 2) + j) = arr2(i, j) Next j Next i With Me.ListBox_spl2 .ColumnCount = 36 ' 18列 + 18列,需与实际列数匹配 .ColumnHeads = True ' 设置36列的宽度,可根据需求调整各列数值 .ColumnWidths = "150,150,150,150,150,150,150,190,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,190,150,150,150,150,150,150,150,150,150,150" .Clear ' 清空ListBox原有内容 .List = arrCombined ' 加载合并后的表格数据 ' 设置表头区域,对应工作表第7行的两个表格表头 .RowSource = sh.Range("A7:AD7").Address End With End Sub
关键说明:
- 第二个表格的列范围需根据实际情况修改:如果第二个表格不是从S列开始,或者列数不是18,要调整
rng2的定义以及ColumnCount、ColumnWidths的对应数值 - 若两个表格的行数不一致,可通过取最大行数、空行补空值的方式处理,避免数据错位
- 使用数组拼接而非直接修改RowSource,能更灵活地处理横向合并的场景,同时提升数据加载效率
内容的提问来源于stack exchange,提问作者shahin syr
相关产品推荐
相关产品推荐

