【发布时间】:2021-10-08 13:30:53
【问题描述】:
如果单元格字体颜色不是 VBRed,我有一部分代码应该隐藏行和列。 它可以工作,但会隐藏范围内的所有行和列,包括字体颜色为 VBRed 的行和列。任何线索这里有什么问题?一样的快乐
With shtDE
For s = DErow + 2 To lrDE
For ss = DEcolIndx + 2 To LcolDE
Set rng1 = .Range(.Cells(s, ss), .Cells(s, ss))
If rng1.Font.Color = vbRed > 0 Then
rng1.EntireRow.Hidden = False
Else
rng1.EntireRow.Hidden = True
End If
Next ss
Next s
End With
With shtDE
For ss = DEcolIndx + 2 To LcolDE
For s = DErow + 2 To lrDE
Set rng1 = .Range(.Cells(s, ss), .Cells(s, ss))
If rng1.Font.Color = vbRed > 0 Then
rng1.EntireColumn.Hidden = False
Else
rng1.EntireColumn.Hidden = True
End If
Next s
Next ss
End With
【问题讨论】:
-
红色是否应用了条件格式?
-
> 0在您的If声明中的意义何在?这可能会评估为False。 -
你在混合
ColorIndex和Color,不要那样做。但是,是的,真正的问题是> 0。vbRed > 0始终是True。所以你的If等同于If rng1.Font.Color = True。 -
Set rng1 = .Range(.Cells(s, ss), .Cells(s, ss))是多余的,仅相当于.Cells(s, ss)。 -
我想我明白了,但我仍然需要用简单的语言表达它以确保我们在同一页面上:最终目标是让所有具有 vbRed 颜色字体的单元格都可见,对吗?因此,如果整个行/列是非红色字体,您只隐藏行/列?在这种情况下,对代码最简单的修改是在
.Hidden = False两行代码之后添加Exit For(免责声明:未经测试)。如果对性能时间有疑问,我可能会提出不同的建议(可能会有一些不必要的隐藏),但这应该会得到最终结果。