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