First, let me explain what I'm trying to do:
I have a spreadsheet with 7 different conditional formats. As it is basically a template, I'm trying to make this spreadsheet as easy as possible for somebody who maybe isn't great with excel to move cells around, and end up with the right conditional formatting. I don't think it should be too difficult to write a macro to clear the conditional formatting and re-apply it, so that's what I'm trying to do.
The problem I'm having:
The first few conditional formats the code applies are all just formatting the background color and not the font. Then when it adds conditional formats that affect the font ('Green formatting for status label for passing test sheet), it suddenly cannot seem to modify them, but instead it applies the font to the previous formats that only formatted the background color. Even when I change Selection.FormatConditions(1) to Selection.FormatConditions(2) or Selection.FormatConditions(3) (there are only 3 formats at that ponit), regardless of whether I specify 1 or 3 it still just applies the formatting to the same (wrong) format. With Selection.FormatConditions(2) it applies it to the other wrong format. I have also tried applying text formatting to the formats that currently only specify the background color, with the same results. Also, in the "'Input cell Failed formatting" block, at the ".Color = RGB(255, 255, 255)" line, I get a "Run-time error '9': Subscript out of range" error. How could it be out of range if I'm modifying the first FormatCondition?
Details/Explainations regarding the code:
The code below is based off of recording a macro from the actual conditional formatting that was already in the spreadsheet. "Status" is a merged cell, the named range explicitly refers to "$D$2:$F$4". "InputCells" is actually multiple dis-continuous areas. There are no cells shared between "Status" and "InputCells". The first conditional format of InputCells, which only formats the background, is executed correctly, the subsequent format of both background color and font color results in a run-time error. "SerialNo" is one of the ranges in "InputCells".
Any help as to why this doesn't work, or suggestions on how to get it to work, would be appreciated.
Public Sub TestSheetCondFormat()
Dim myActiveCell As Range
Dim CompletionCell As Range, CompletionAddress As String
Dim FailCell As Range, FailAddress As String
Dim InitSelection As Range, IntitActive As Range
Set InitSelection = Selection
Set InitActive = ActiveCell
' Application.ScreenUpdating = False
ActiveSheet.Unprotect
Cells.FormatConditions.Delete
Set CompletionCell = Cells(Range("SerialNo").Cells(1, 1).Row, Range("myHiddenColumns").Cells(1, 1).Column)
CompletionAddress = CompletionCell.Address(RowAbsolute:=False)
Set FailCell = Cells(Range("SerialNo").Cells(1, 1).Row, Range("myHiddenColumns").Cells(1, 2).Column)
FailAddress = CompletionCell.Address(RowAbsolute:=False)
'Sheet Incomplete formatting
Cells.Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=SheetComplete=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
With .Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.799981688894314
End With
.StopIfTrue = False
End With
'Good input cell formatting
Range("InputCells").Select
Range("SerialNo").Cells(1, 1).Activate
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=" & CompletionAddress & "<>"""""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
With .Interior
.PatternColorIndex = xlAutomatic
.Color = 13500365
.TintAndShade = 0
End With
.StopIfTrue = False
End With
'Sheet Failed Formatting
Cells.Select
Range("SerialNo").Cells(1, 1).Activate
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=SheetFail=1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
With .Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.599963377788629
End With
.StopIfTrue = False
End With
'Empty input cell formatting
Range("InputCells").Select
Range("SerialNo").Cells(1, 1).Activate
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=NOT(" & CompletionAddress & ")"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
With .Interior
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
End With
.StopIfTrue = False
End With
'Green formatting for status label for passing test sheet
Range("Status").Select
Selection.Activate
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=AND(SheetFail=0,SheetComplete=1)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
With .Font
.Color = -13715410
.TintAndShade = 0
End With
.StopIfTrue = False
End With
'Input cell Failed formatting
Range("InputCells").Select
Range("SerialNo").Cells(1, 1).Activate
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=" & FailAddress
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
With .Font
.Color = RGB(255, 255, 255)
.TintAndShade = 0
End With
With .Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
.StopIfTrue = False
End With
'Blue formatting for status label for incomplete sheet
Range("Status").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=AND(SheetComplete=0,SheetFail=0)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
With .Font
.ThemeColor = xlThemeColorAccent5
.TintAndShade = -0.249946592608417
End With
.StopIfTrue = False
End With
InitSelection.Select
InitActive.Activate
ActiveSheet.Protect
' Application.ScreenUpdating = True
End Sub
Bookmarks