I\'m very new to VBA (and any sort of programming in general), so I\'m not sure how to proceed here. I\'m guessing my error has something to do with overlapping ranges for my c
There are two problems with your code:
FormatConditions(3))FormatConditions.Add requires the local formulas though.I reworked your code, take a look if it solves your problem:
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:="=and(R[]C7=""4. Develop"", R[]C11<15)", intColorIndex:=3
fctApply rng:=Range("$k$20:$k$1000"), strFormulaR1C1:="=and(R[]C7=""5. Prove"", 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
With fctApply(rng:=Range("$g$20:$g$1000"), strFormulaR1C1:=0, intType:=xlCellValue, intOperator:=xlLess, intColorIndex:=3)
.Interior.Color = RGB(204, 204, 255)
.Interior.Pattern = xlSolid
End With
With 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
End With
End Sub
Private Function fctApply(rng As Range, _
strFormulaR1C1 As Variant, _
Optional intType As XlFormatConditionType = xlExpression, _
Optional intOperator As XlFormatConditionOperator, _
Optional intColorIndex As Integer = -1, _
Optional dblRGB As Double = -1, _
Optional blnDeleteOldConditions As Boolean = False _
) As FormatCondition
Dim objCond As FormatCondition
Dim strFormula As String
If blnDeleteOldConditions Then rng.FormatConditions.Delete
strFormula = Application.ConvertFormula(strFormulaR1C1, xlR1C1, xlA1)
On Error GoTo ConvertLocal
If intOperator <> 0 Then
rng.FormatConditions.Add Type:=intType, _
Formula1:=strFormula, Operator:=intOperator
Else
rng.FormatConditions.Add Type:=intType, _
Formula1:=strFormula
End If
On Error GoTo 0
Set objCond = rng.FormatConditions(rng.FormatConditions.Count)
If intColorIndex <> -1 Then
objCond.Font.ColorIndex = intColorIndex
ElseIf dblRGB <> -1 Then
objCond.Font.Color = dblRGB
End If
Set fctApply = objCond
Exit Function
ConvertLocal:
With Range("A1") 'change this to an empty cell address - it is temporarily used to translate from local to normal formulas
.Formula = strFormula
strFormula = .FormulaLocal
.Formula = ""
End With
Resume
End Function