为什么 MS Excel 作为宏运行时会更改我的条件格式规则?

为什么 MS Excel 作为宏运行时会更改我的条件格式规则?

我设置了一些非常标准的条件格式规则来帮助监控我公司的打印机墨粉水平。当“手动”应用规则时,一切都运行正常,输出如下所示:

图片1

当条件格式作为宏的一部分应用时,其前面的步骤从更广泛的报告中提取相关列,输出如下所示:

图片2

尝试过但无效的故障排除步骤包括但不限于:

  1. 在运行宏之前,将单击报告按钮生成的.csv 文件保存为.xlsm 文件。
  2. 将宏保存在个人宏工作簿中,而不是活动工作簿中。
  3. 更改条件格式规则的顺序。

灰色填充应用于最后 3 列中的每个单元格和第一列中的多个单元格,但实际上不应该这样,我不知道为什么。我猜想这与宏运行时空白单元格更改为该公式的规则有关,但我也不知道为什么会发生这种情况。

Excel 版本:Microsoft® Excel® for Microsoft 365 MSO(版本 2202 内部版本 16.0.14931.20118)32 位

该宏是录制的而不是编程的,但这里是代码:

Sub TonerLevels()
'
' TonerLevels Macro
'

'
    Columns("B:B").Select
    ActiveWindow.SmallScroll ToRight:=3
    Range("B:B,N:N").Select
    Range("N1").Activate
    Selection.Copy
    ActiveWindow.SmallScroll ToRight:=-3
    Range("A1").Select
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Columns("B:B").Select
    Application.CutCopyMode = False
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar:= _
        ":", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _
        Array(6, 1), Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True
    Columns("A:I").Select
    Columns("A:I").EntireColumn.AutoFit
    Range("C4:C1048576,E4:E1048576,G4:G1048576,I4:I1048576").Select
    Range("I4").Activate
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=LEN(TRIM(I4))=0"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249946592608417
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=0", Formula2:="=0.04"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=0.05", Formula2:="=0.09"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16754788
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 10284031
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=0.1", Formula2:="=1"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16752384
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13561798
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Cells.FormatConditions.Delete
    Range("C4:C1048576,E4:E1048576,G4:G1048576,I4:I1048576").Select
    Range("I4").Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=0", Formula2:="=0.04"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("C4:C1048576,E4:E1048576,G4:G1048576,I4:I1048576").Select
    Range("I4").Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=0.05", Formula2:="=0.09"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16754788
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 10284031
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("C4:C1048576,E4:E1048576,G4:G1048576,I4:I1048576").Select
    Range("I4").Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="=0.1", Formula2:="=1"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16752384
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13561798
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("C4:C1048576,E4:E1048576,G4:G1048576,I4:I1048576").Select
    Range("I4").Activate
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=LEN(TRIM(I4))=0"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249946592608417
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    ActiveWindow.SmallScroll Down:=-18
    Range("A1").Select
End Sub

答案1

了解正在发生的事情

关键点:

  1. 规则不同:
    • 手动应用:Cell contains a blank value
    • 宏应用:Formula: =LEN(TRIM(I4))=0
  2. 格式会改变背景颜色,但不会改变文本颜色。图像中只显示黑色,因为这是“自动”着色。

让我们检查一下如何在与手动规则看起来不同的单元格中应用此功能:

  • 单元格是否包含空值?否,确定,跳过此规则。
  • 单元格值是否介于 0.1 和 1 之间?如果是,则将背景和文本变为绿色。
  • 单元格是否介于 0.05 和 0.09 之间?如果是,则将背景和文本变为黄色。
  • 单元格是否介于 0 和 0.04 之间?如果是,请将背景和文本变为红色。

最后三个条件之间没有重叠。(附注:不过,像 0.095 这样的数字存在差距。)这意味着我们不必担心干扰规则。任何有值的东西都不会是空白的,这意味着它们与第一个规则也没有重叠。

现在我们来看一下宏的应用规则:

  • I4 中的值的长度是否为 0?此单元格引用未锁定,因此它会在所有单元格中变化。公式中的单元格用于“应用于”范围的左上角单元格,因此:C4将使用I4C5将使用I5D6将使用J6等。对于 C 列中的前几行,I 列中的对应单元格为空白,因此此公式返回 TRUE。对于 D:I 列中的所有内容也是如此,因为它们将引用 I 右侧的列,这些列均为空白。但是,C 列中屏幕截图中间的单元格列 I 中有对应值,因此此公式返回 FALSE。如果为 false,则跳过该规则。如果为 true,则单元格的背景将设置为灰色但文本颜色没有改变。
  • 单元格值是否介于 0.1 和 1 之间?如果是,则将背景和文本变为绿色。
  • 单元格是否介于 0.05 和 0.09 之间?如果是,则将背景和文本变为黄色。
  • 单元格是否介于 0 和 0.04 之间?如果是,请将背景和文本变为红色。

这些规则有重叠。较高的规则优先。由于第一条规则设置了背景颜色,因此较低的规则不能更改背景颜色。但是,它们更改文本颜色,因为第一条规则没有设置它。


纠正问题

选项 1) 更改宏以使用与手动方法相同的条件。

选项2)将宏更改为引用单元格C4

相关内容