As an alternative, I would suggest you look at the code found here:
fNetWorkdays() and fAddWorkdays()
To get the previous workday of a given date you would simply call fAddWorkdays(somepasseddate, 0)
All the holidays are table driven, thus allowing for complete flexibility.