如何将指定颜色单元格选中的VBA代码应用到工作表所有表格?
解决多ListObject工作表中选中指定颜色单元格的问题
你修改后的代码逻辑有误——只是重复遍历同一个固定范围L54:L4000多次,并没有针对每个表格的实际区域处理,所以无法实现遍历所有表格的目标。以下是两种按表格遍历的正确实现方式:
方式1:遍历所有表格的所有单元格
这个版本会检查工作表中每个表格的所有数据单元格,选中其中DisplayFormat.Interior.ColorIndex = 19的单元格:
Sub Validation() Dim tbl As ListObject Dim cell As Range Dim FoundRange As Range ' 遍历当前工作表的所有表格 For Each tbl In ActiveSheet.ListObjects ' 遍历表格的数据区域(不含表头) For Each cell In tbl.DataBodyRange.Cells If cell.DisplayFormat.Interior.ColorIndex = 19 Then If FoundRange Is Nothing Then Set FoundRange = cell Else Set FoundRange = Union(FoundRange, cell) End If End If Next cell Next tbl ' 统一选中所有符合条件的单元格 If Not FoundRange Is Nothing Then FoundRange.Select End Sub
如果需要包含表格表头,把tbl.DataBodyRange替换成tbl.Range即可。
方式2:仅遍历表格中的指定列(比如原需求的L列)
如果只需要检查表格中的L列(第12列),可以用这个版本提升效率:
Sub Validation() Dim tbl As ListObject Dim targetCol As Range Dim cell As Range Dim FoundRange As Range For Each tbl In ActiveSheet.ListObjects ' 获取表格中第12列(L列)的数据区域 On Error Resume Next Set targetCol = tbl.ListColumns(12).DataBodyRange On Error GoTo 0 ' 如果该表格存在L列数据,再遍历检查 If Not targetCol Is Nothing Then For Each cell In targetCol.Cells If cell.DisplayFormat.Interior.ColorIndex = 19 Then If FoundRange Is Nothing Then Set FoundRange = cell Else Set FoundRange = Union(FoundRange, cell) End If End If Next cell End If Next tbl If Not FoundRange Is Nothing Then FoundRange.Select End Sub
如果你的表格有明确的表头名称,也可以把tbl.ListColumns(12)改成tbl.ListColumns("你的表头名称"),这样更灵活。
内容的提问来源于stack exchange,提问作者Lennon
相关产品推荐
相关产品推荐

