在未select的范围内设置FormatCondition时,会失败吗?

我有这个VBA代码:

Private Sub Worksheet_Activate() Sheet1.Cells(10, 10).Select Range("$B$2:$E$7").FormatConditions.Delete With Range("$B$2:$E$7").FormatConditions.Add(Type:=xlExpression, Formula1:="=$G2=""Yes""") .Interior.Color = RGB(150, 100, 0) End With Debug.Print "Formula is wrong : " & Range("$B$2:$E$7").FormatConditions(1).Formula1 Range("$B$2:$E$7").Select Range("$B$2:$E$7").FormatConditions.Delete With Range("rngDatesLockedRange").FormatConditions.Add(Type:=xlExpression, Formula1:="=$G2=""Yes""") .Interior.Color = RGB(150, 100, 0) End With Debug.Print "Formula is correct : " & Range("$B$2:$E$7").FormatConditions(1).Formula1 End Sub 

debugging跟踪显示:

 Formula is wrong : =$G1048570="Yes" Formula is correct : =$G2="Yes" 

为什么在将格式应用到该范围之前未select范围时,它不起作用? 在Excel 2010中,这工作正常吗?

微软有一个kb的文章 ! 在这个确切的问题。

它似乎证实了这个问题,但build议使用绝对引用或select单元格作为解决方法。

Excel中的条件格式(至less在2007年)将使规则相对于格式规则的开始位置您的当前select 。 请注意,如果您使用绝对的$引用字符,则不会发生这种情况。

让我来解释一下你的具体情况:

你的macros马上select10,10J10 。 现在你使用公式=$G2="YES"并且由于你有$G列的绝对引用,所以列永远不会改变。 然而,行将相对于条件开始的地方(即B2 )改变。 那么10-2=8所以它会将行向上移动8个空格,因为你从第2行开始会溢出8-2=6空格。 Excel 2007中有1048576行,因此您看到1048570因为1048576 - 6 = 1048570 。 导致您的最终公式=$G1048570="YES"

一旦select了使用条件格式的范围,该行就不会更改,因为您位于同一行。 希望是有道理的。