检查单元格背景色的VBA If函数未生效,求排查方案
问题排查方向
确认
ws对象是否正确赋值
必须提前将ws指定为目标单元格所在的工作表,比如执行Set ws = ThisWorkbook.Worksheets("你的工作表名"),否则代码会因对象引用无效而无任何操作。检查
.Value的上下文
代码中的.Value依赖外层With语句的对象,要确认该对象的Value是你需要的行号数值。如果With的对象错误,或者.Value为空/非数值,Cells(.Value +1,28)会指向错误的单元格,导致判断失效。区分手动设置颜色和条件格式颜色
若单元格颜色是通过条件格式设置的,Interior.ColorIndex获取的是单元格默认底色,而非条件格式生效后的显示色。这种情况要改用DisplayFormat.Interior.ColorIndex获取实际显示颜色:If ws.Cells(.Value + 1, 28).DisplayFormat.Interior.ColorIndex = 16 Then Mark1.LU1DISCOCHECK = True Else Mark1.LU1DISCOCHECK = False End If验证ColorIndex的准确性
可以先运行下面的代码确认目标单元格的实际ColorIndex:MsgBox ws.Cells(你的目标行号, 28).Interior.ColorIndex若弹出数字不是16,说明对ColorIndex的认知有误——部分主题色或自定义RGB颜色对应的ColorIndex并非16,这时可以改用
Interior.Color匹配具体RGB值,比如标准灰色:If ws.Cells(.Value + 1, 28).Interior.Color = RGB(192,192,192) Then Mark1.LU1DISCOCHECK = True Else Mark1.LU1DISCOCHECK = False End If确认复选框的引用正确性
如果Mark1是用户窗体,要确保窗体已加载(比如执行Load Mark1);如果复选框是工作表上的控件,引用方式应为工作表名.LU1DISCOCHECK,而非Mark1.LU1DISCOCHECK。
内容的提问来源于stack exchange,提问作者cheese10234
相关产品推荐
相关产品推荐

