迭代列表对象的行,如何访问整行?

Posted

技术标签:

【中文标题】迭代列表对象的行,如何访问整行?【英文标题】:Iterating on a list object's rows, how can I access the entire row? 【发布时间】:2021-10-04 09:05:55 【问题描述】:

我来找你是因为在线 VBA 文献在处理表格和列表对象时没有显示很多结果。

通过以下代码,我将列表对象项添加到用户表单中的列表框中。我遍历列表对象的行。但我需要验证该行是否被隐藏,因为有时电子表格中的表格上会有过滤器:

With Main
    .Clear
    Dim i As Long
    For i = 1 To tblDataMaster.ListRows.Count
        If tblDataMaster.Row(i).Hidden = False Then
            .AddItem
            Dim j As Integer
            For j = 0 To 9
                .List(.ListCount - 1, j) = tblDataMaster.DataBodyRange(i, (j + 5))
            Next j
        End If
    Next i
    End With

当然,代码不会工作,因为 .Row 不是列表对象的属性。但只是为了说明,If 语句需要验证该行是否隐藏。如果不是,那么它将用它填充列表框。

.DataBodyRange(i,1) 之类的东西也不起作用。

任何帮助,不胜感激。

【问题讨论】:

【参考方案1】:

关键是使用ListRow.Range

Dim tblRow As ListRow
For Each tblRow In tblDataMaster.ListRows
    If Not tblRow.Range.EntireRow.Hidden Then
        ...
    End If
Next

或者如果按索引迭代:

For i = 1 To tblDataMaster.ListRows.Count
    If Not tblDataMaster.ListRows(i).Range.EntireRow.Hidden Then
        ...
    End If
Next

【讨论】:

我的男人!将它与 For Each 一起使用,它工作得很好......出于好奇,当使用 .Range 没有参数时(我认为是正确的词?),它引用的是什么?就是这样,为什么不直接跳过并转到 .EntireRow? ListRow 没有 .EntireRow 属性。 Range 指的是列表行跨越的单元格。 EntireRowsheet.... 从 A 列一直到最后一列的整行。您必须检查整行是否隐藏,因为不可能只隐藏一行的一部分。 知道了!再次感谢您!

以上是关于迭代列表对象的行,如何访问整行?的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代 Yii CActiveDataProvider 对象?

如何在 Python Pandas 中扩展存储为单个值的可迭代对象? (又名反向分组)[重复]

如何通过文件列表循环迭代工具?

EXCEL如何从单元格选中到它所在的整行

如何迭代对象数组或将对象列表转换为数组?

按下按钮时如何删除布局