Question on the part below, is it supposed to be like this? Because I'm having compilation error.
Assuming that it should be SearchRange.FindNext, I just noticed when it enters the while statement it will remove all fill colors regardless if its the "target fill color".
It seems like if it found a cell with the target fill color, starting from that cell, it will check each individual cell and removed the fill color. 
Public Function removeFillColors(ws Worksheet)
call ExcelDiet(ws) <---- I added the code you referred me
....
Do While Not cellRange Is Nothing
cellRange.Interior.Color = xlNone
hasChange = true
Set cellRange = FindNext(cellRange) <---- This should be like SearchRange.FindNext(cellRange) right?
Loop
End Function