VBA条件格式设置:解决运行时错误9及空白单元格不格式化需求
问题解决:运行时错误9修复+空单元格排除逻辑
运行时错误9的原因
你代码里的Scorecard变量只定义了但没赋值,导致Sheets(Scorecard)试图访问一个不存在的工作表(空字符串对应的工作表不存在),触发下标越界错误。另外代码里的sheetNameWhereRangeToBeFormattedIs变量完全冗余且未声明,属于无效代码。
修正后的代码(含空单元格排除逻辑)
Sub Conditional_Formatting() Dim wsScorecard As Worksheet Dim formatted_range As Range ' 检查并获取目标工作表 On Error Resume Next Set wsScorecard = ThisWorkbook.Worksheets("Scorecard") On Error GoTo 0 ' 工作表不存在则提示退出 If wsScorecard Is Nothing Then MsgBox "名为Scorecard的工作表不存在,请检查名称。", vbExclamation Exit Sub End If ' 指定要格式化的单元格范围 Set formatted_range = wsScorecard.Range("E3:E12") ' 清除原有条件格式 formatted_range.FormatConditions.Delete With formatted_range ' 非空且值 < -0.02 → 红色填充 .FormatConditions.Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK(E3)), E3 < -0.02)").Interior.Color = RGB(255, 0, 0) ' 非空且值在-0.02到0之间(含边界)→ 黄色填充 .FormatConditions.Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK(E3)), E3 >= -0.02, E3 <= 0)").Interior.Color = RGB(255, 255, 0) ' 非空且值 > 0 → 绿色填充 .FormatConditions.Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK(E3)), E3 > 0)").Interior.Color = RGB(0, 128, 0) End With End Sub
关键改动说明
- 修复下标越界:改用工作表对象直接获取目标工作表,添加存在性检查,避免因工作表名错误或不存在触发错误。
- 排除空单元格:将条件格式类型改为
xlExpression,通过AND(NOT(ISBLANK(E3)), 数值条件)的公式,确保只有非空单元格才会应用格式。 - 逻辑一致性:第二个条件明确包含边界值(和原代码
xlBetween的逻辑一致),避免歧义。
内容的提问来源于stack exchange,提问作者Sara N
相关产品推荐
相关产品推荐

