运行时错误'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
任何意见,将不胜感激,谢谢!
你的代码有两个问题:
- 您只删除第一个范围的条件格式 – 但是将条件添加到所有范围 – 稍后访问最有可能不是刚刚创build的特定格式(
FormatConditions(3)
) - 您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