Excel VBA:如何将表格可见行数据赋值到数组以加载ListBox?
仅加载Excel表格可见行B、C列数据到ListBox的实现
之前的代码直接读取单元格区域赋值给数组,会把隐藏行数据也加载到ListBox里,现在需要基于ListObject的行遍历逻辑,只提取可见行的B、C列数据,同时解决数组下标越界问题。
完整实现代码
Dim tbl As ListObject Dim rngRow As Range Dim myArray() As Variant Dim rowCount As Integer Dim colIndex As Integer Set tbl = Workbook1.Sheets("Sheet1").ListObjects("Table1") rowCount = 0 ' 初始化ListBox With Me.lbWaste .Clear .ColumnHeads = False .ColumnCount = 2 ' B、C列共2列 .ColumnWidths = "100;50" End With ' 遍历表格行,仅处理可见行 For Each rngRow In tbl.DataBodyRange.Rows If Not rngRow.EntireRow.Hidden Then rowCount = rowCount + 1 ' 动态扩展数组,避免下标越界 ReDim Preserve myArray(1 To rowCount, 1 To 2) ' 赋值B列(表格第2列)和C列(表格第3列)的值 myArray(rowCount, 1) = rngRow.Cells(1, 2).Value myArray(rowCount, 2) = rngRow.Cells(1, 3).Value End If Next rngRow ' 将数组加载到ListBox If rowCount > 0 Then Me.lbWaste.List = myArray End If Me.lbWaste.TopIndex = 0
关键说明
- 使用动态数组搭配
ReDim Preserve动态扩展数组长度,彻底避免固定数组引发的下标越界错误 - 通过
Not rngRow.EntireRow.Hidden判断行可见性,仅将可见行数据存入数组 - 直接引用ListObject的列索引(B对应表格第2列、C对应第3列),保证取值精准
- 最后判断数组有数据时再赋值给ListBox,避免空数组导致的异常
内容的提问来源于stack exchange,提问作者Daniel Keith
相关产品推荐
相关产品推荐

