【问题标题】:Is there a way to loop through the visible cells in a table (listobject) column?有没有办法遍历表(listobject)列中的可见单元格?
【发布时间】:2022-01-12 05:50:32
【问题描述】:

在 Excel 表 (ListObject) 中,我已经开始跟踪数百部电影及其状态,因为我将它们撕成光盘以在 Plex 中使用。这张桌子没有什么花哨的;它存储您期望的内容,例如翻录文件夹、Plex 媒体文件夹、电影名称、发行年份、我存储原始光盘文件副本的备份文件夹等。我在之后创建了工作簿我已经拍了几百部电影以使跟踪更容易。由于在创建工作簿之前我的方法不一致,我现在需要在工作簿中进行一些清理工作。我想使用 VBA 来做,因为手动更正会很乏味、容易出错并且需要很长时间。我有一个我相信会起作用的算法,但它依赖于遍历过滤表列中可见单元格的能力——我将使用该列来确定是否需要对该行进行任何更正,然后在需要的地方,需要进行更正的列。

如有任何指导,我们将不胜感激! 谢谢

【问题讨论】:

  • 为什么循环必须发生在过滤的行上?为什么不能将用作表格过滤器的条件转换为循环内的条件语句?
  • 好问题。简短的回答是因为我预计情况会以我无法预测的方式发生变化,因为它们是基于我将来犯的任何错误。我已经拍了 400 部电影;我有大约 1000 台机器要做,为了提高效率,我设置了 3 台机器来处理它们,因此我将更新所有 3 台机器的工作簿(它们具有不同的本地驱动器,可用于中间翻录阶段)。这个过程既乏味又漫长,所以我预计我会犯一些错误。所以我希望这个纠正过程足够灵活来处理这个问题。
  • @JosWoolley 的另一个原因是因为我想限制范围 - 以及潜在的损害 - 如果我的代码中存在错误,并且在代码运行限制,我需要检查错误。我不确定您是否问过,因为我想做的事情要么是不可能的,要么是不可取的。无论哪种情况,我都想知道,因为我只有 VBA 的中级技能,我是来学习的。谢谢

标签: excel loops visible listobject


【解决方案1】:
Sub Test()

Set MyTable = Worksheets("Sheet1").ListObjects("Table1")

With MyTable
    For i = 1 To .DataBodyRange.Rows.Count
        If .DataBodyRange.Rows(i).EntireRow.Hidden = False Then
            [Do Something]
        End If
    Next i
End With

End Sub

[Do Something] 替换为您想要对可见行执行的操作,例如:

Sub Test()

Set MyTable = Worksheets("Sheet1").ListObjects("Table1")

With MyTable
    For i = 1 To .DataBodyRange.Rows.Count
        If .DataBodyRange.Rows(i).EntireRow.Hidden = False Then
            .DataBodyRange(i, 3).Value = "I'm not hidden!"
        End If
    Next i
End With

End Sub

输入“我没有隐藏!”将每个可见行放入该表的第三列。

【讨论】:

  • 谢谢@joswoolley。我实施了您的解决方案的修改版本,效果很好!我以前见过.EntireRow 属性,但不知道它有.Hidden 属性。看起来它们可能起作用的方法的数量之多使得反复试验变得乏味。你节省了我很多时间!
猜你喜欢
  • 2019-10-14
  • 2022-01-05
  • 2020-07-06
  • 2021-07-14
  • 2021-04-05
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多