运行时错误'9'使用条件格式代码超出范围

我对VBA(以及任何一般的编程)都很陌生,所以我不确定如何在这里继续。 我猜我的错误与我的条件格式的重叠范围有关,因为当代码设置了不同的方式,一旦范围不再重叠时解决,我也有错误。 这可能不是这种情况,但我认为这将有助于知道。

我得到一个'下标超出范围'错误与下面的代码:

Sub test2() Dim rngToFormat As Range Set rngToFormat = ActiveSheet.Range("$a$1:$z$1000") Dim rngToFormat2 As Range Set rngToFormat2 = ActiveSheet.Range("$k$20:$k$1000") Dim rngToFormat3 As Range Set rngToFormat3 = ActiveSheet.Range("$j$22:$j$1000") Dim rngToFormat4 As Range Set rngToFormat4 = ActiveSheet.Range("$i$22:$i$1000") Dim rngToFormat5 As Range Set rngToFormat5 = ActiveSheet.Range("$g$20:$g$1000") Dim rngToFormat6 As Range Set rngToFormat6 = ActiveSheet.Range("$d$9, $f$9") Dim rngToFormat7 As Range Set rngToFormat7 = ActiveSheet.Range("$G$3:$G$7,$G$11:$G$15,$E$3:$E$7,$E$11:$E$15,$N$3:$N$7,$N$11:$N$15,$L$3:$L$7,$L$11:$L$15") rngToFormat.FormatConditions.Delete rngToFormat.FormatConditions.Add Type:=xlExpression, _ Formula1:="=if(R[]C20=1, true(), false())" rngToFormat.FormatConditions(1).Font.Color = RGB(228, 109, 10) rngToFormat2.FormatConditions.Add Type:=xlExpression, _ Formula1:="=and(R[]C7=""6. Negotiate"", R[]C11<25)" rngToFormat2.FormatConditions(2).Font.ColorIndex = 3 rngToFormat2.FormatConditions.Add Type:=xlExpression, _ Formula1:="=and(R[]C7=""4. Develop"", R[]C11<15)" rngToFormat2.FormatConditions(3).Font.ColorIndex = 3 rngToFormat2.FormatConditions.Add Type:=xlExpression, _ Formula1:="=and(R[]C7=""5. Prove"", R[]C11<20)" rngToFormat2.FormatConditions(4).Font.ColorIndex = 3 rngToFormat2.FormatConditions.Add Type:=xlExpression, _ Formula1:="=and(R[]C7=""7. Committed"", R[]C11<30)" rngToFormat2.FormatConditions(5).Font.ColorIndex = 3 rngToFormat2.FormatConditions.Add Type:=xlExpression, _ Formula1:="=and(R[]C7=""Closed Won"", R[]C11<35)" rngToFormat2.FormatConditions(6).Font.ColorIndex = 3 rngToFormat3.FormatConditions.Add Type:=xlCellValue, _ Operator:=xlGreater, Formula1:=200 rngToFormat3.FormatConditions(7).Font.ColorIndex = 3 rngToFormat4.FormatConditions.Add Type:=xlCellValue, _ Operator:=xlGreater, Formula1:=60 rngToFormat4.FormatConditions(8).Font.ColorIndex = 3 rngToFormat5.FormatConditions.Add Type:=xlExpression, _ Formula1:="=or(R[]C7=""1. Plan"", R[]C7=""2. Create"", R[]C7=""3. Qualify"")" rngToFormat5.FormatConditions(9).Font.ColorIndex = 3 rngToFormat6.FormatConditions.Add Type:=xlCellValue, _ Operator:=xlLess, Formula1:=0 rngToFormat6.FormatConditions(10).Font.ColorIndex = 3 rngToFormat6.FormatConditions(10).Interior.Color = RGB(204, 204, 255) rngToFormat6.FormatConditions(10).Interior.Pattern = xlSolid rngToFormat7.FormatConditions.Add Type:=xlCellValue, _ Operator:=xlLess, Formula1:=0 rngToFormat7.FormatConditions(11).Font.ColorIndex = 3 rngToFormat7.FormatConditions(11).Interior.Color = RGB(215, 228, 158) rngToFormat7.FormatConditions(11).Interior.Pattern = xlSolid End Sub 

任何意见,将不胜感激,谢谢!

你的代码有两个问题:

  1. 您只删除第一个范围的条件格式 – 但是将条件添加到所有范围 – 稍后访问最有可能不是刚刚创build的特定格式( FormatConditions(3)
  2. 您input的公式是默认的英文公式 – 由于某些原因, FormatConditions.Add需要本地公式。

我重写了你的代码,看看它是否解决了你的问题:

 Sub test2()

     fctApply rng:= Range(“$ a $ 1:$ z $ 1000”),strFormulaR1C1:=“=(R [] C20 = 1)”,dblRGB:= RGB(228,109,10),blnDeleteOldConditions:= True

     fctApply rng:= Range(“$ k $ 20:$ k $ 1000”),strFormulaR1C1:=“= and(R [] C7 =”“6. Negotiate”“,R [] C11 <25)”,intColorIndex:= 3
     fctApply rng:= Range(“$ k $ 20:$ k $ 1000”),strFormulaR1C1:=“=和(R [] C7 =”“4.开发”“,R [] C11 <15)”,intColorIndex:= 3
     fctApply rng:= Range(“$ k $ 20:$ k $ 1000”),strFormulaR1C1:=“= and(R [] C7 =”“5.certificate”“,R [] C11 <20)”,intColorIndex:= 3
     fctApply rng:= Range(“$ k $ 20:$ k $ 1000”),strFormulaR1C1:=“= and(R [] C7 =”“7. Committed”“,R [] C11 <30)”,intColorIndex:= 3
     fctApply rng:= Range(“$ k $ 20:$ k $ 1000”),strFormulaR1C1:=“= and(R [] C7 =”“Closed Won”“,R [] C11 <35)”,intColorIndex:= 3

     fctApply rng:= Range(“$ j $ 22:$ j $ 10000”),strFormulaR1C1:= 200,intType:= xlCellValue,intOperator:= xlGreater,intColorIndex:= 3

     fctApply rng:= Range(“$ i $ 22:$ i $ 1000”),strFormulaR1C1:= 60,intType:= xlCellValue,intOperator:= xlGreater,intColorIndex:= 3

    使用fctApply(rng:= Range(“$ g $ 20:$ g $ 1000”),strFormulaR1C1:= 0,intType:= xlCellValue,intOperator:= xlLess,intColorIndex:= 3)
         .Interior.Color = RGB(204,204,255)
         .Interior.Pattern = xlSolid
    结束

    用fctApply(rng:= Range(“$ G $ 3:$ G $ 7,$ G $ 11:$ G $ 15,$ E $ 3:$ E $ 7,$ E $ 11:$ E $ 15,$ N $ 3:$ N $ 7,$ N $ 11:$ N $ 15,$ L $ 3:$ L $ 7,$ L $ 11:$ L $ 15“),strFormulaR1C1:= 0,intType:= xlCellValue,intOperator:= xlLess,intColorIndex:= 3)
         .Interior.Color = RGB(215,228,158)
         .Interior.Pattern = xlSolid
    结束
结束小组

私人functionfctApply(rng作为范围,_
     strFormulaR1C1作为变体,_
    可选的intType由于XlFormatConditionType = xlExpression,_
    可选的intOperator作为XlFormatConditionOperator,_
    可选intColorIndex As Integer = -1,_
    可选dblRGB As Double = -1,_
    可选blnDeleteOldConditions As Boolean = False _
     )作为FormatCondition

     Dim objCond As FormatCondition
    昏暗strFormula作为string

    如果blnDeleteOldConditions则rng.FormatConditions.Delete

     strFormula = Application.ConvertFormula(strFormulaR1C1,xlR1C1,xlA1)

    在错误转到ConvertLocal
    如果intOperator <> 0那么
         rng.FormatConditions.Addtypes:= intType,_
            公式1:= strFormula,运算符:= intOperator
    其他
         rng.FormatConditions.Addtypes:= intType,_
            一级方程式:= strFormula
    万一
    在错误转到0
    设置objCond = rng.FormatConditions(rng.FormatConditions.Count)
    如果intColorIndex <> -1那么
         objCond.Font.ColorIndex = intColorIndex
    否则如果dblRGB <> -1那么
         objCond.Font.Color = dblRGB
    万一
    设置fctApply = objCond

    退出function
 ConvertLocal:
    使用范围(“A1”)将其更改为空单元格地址 - 暂时用于从局部到公式的转换
         .Formula = strFormula
         strFormula = .FormulaLocal
         .Formula =“”
    结束
    恢复
结束function