VBA判断单元格字体为vbRed不隐藏行列却全隐藏问题排查
问题根因
1. 判断条件语法错误
VBA中比较运算符>的优先级高于=,你写的rng1.Font.Color = vbRed > 0不会按预期的“判断字体颜色是否等于vbRed”执行,实际执行顺序是:
- 先计算
vbRed > 0:vbRed的常量值为255,所以这个表达式返回布尔值True,VBA中布尔值True对应的数值是-1 - 再判断
rng1.Font.Color = -1:正常单元格字体颜色不可能为-1,所以这个条件永远不成立,所有判断都走Else分支,自然会把所有行列都隐藏。
2. 循环逻辑错误
你现在是逐单元格判断后直接修改行列隐藏状态,同个行/列的后续单元格判断结果会覆盖之前的结果。比如某一行有一个红色单元格,你判断到该单元格时把行设为不隐藏,但继续遍历到该行后续非红色单元格时,又会把行重新设为隐藏,最终只有整行/整列全为红色的内容才会保留,不符合需求。
修正方案
正确逻辑是先遍历所有单元格标记需要保留的行和列,最后统一设置隐藏状态,只需一次双层循环即可完成,效率更高:
With shtDE ' 先初始化目标范围所有行和列为隐藏状态 .Rows(DErow + 2 & ":" & lrDE).Hidden = True .Columns(DEcolIndx + 2 & ":" & LcolDE).Hidden = True ' 遍历所有单元格,标记有红色字体的行和列 For s = DErow + 2 To lrDE For ss = DEcolIndx + 2 To LcolDE If .Cells(s, ss).Font.Color = vbRed Then ' 只要单元格为红色,对应行和列都设为不隐藏 .Rows(s).Hidden = False .Columns(ss).Hidden = False End If Next ss Next s End With
内容的提问来源于stack exchange,提问作者Radosław Sokolowski
相关产品推荐
相关产品推荐

