The following simplified code worked for me without an error:
Set Rng = ThisWorkbook.Worksheets(1).UsedRange. _
SpecialCells(xlCellTypeFormulas)
Rng.Formula = Rng.Formula
That should run MUCH faster than a loop.
As for not running this every time a workbook opens, your addin has a
worksheet, right?
You could keep a list on that worksheet that gives the names of workbooks that
have been "fixed" and (maybe) the date that the code executed.
Then modify the routine below to first check the list for the name of the
active workbook. If it's on the list, exit the sub. If it's not, run the rest
of the code, then add the name to the list.
Or you could write a flag to the workbook itself, in some out-of-the-way
place, check it, and update it when the code has been run.
Or instead of a flag or list, you can select cells containing errors. If there
are any, make the assumption that it's due to the current problem and replace
the formulas