I'm having trouble understanding your explanation. There is no
ActiveSheet.Calculate in the code you've quoted.
> I'm changing the ColumnWidth value of a cell in a loop.
> Every time I change that value I do an ActiveSheet.Calculate.
> In another cell I have the function below.
Do you mean the value of the cell or the width of the cell? Changing the
width of a cell will not make it "dirty". Therefore it won't necessarily
participate in a calculate. (Calculate only recalculates what needs it.)
In your function, one of the Select legs has
Range(Application.Caller.Address).Width *
Sheets("Conversion").Range("C2").Value
and the other legs are similar, but simpler.
These will do what you expect them to do - i.e. they will use the current
values of those items when the function runs.
But is the function running?
A change to either of those two cells will not trigger the running of the
function. It will only run if the cell that includes the function call is
directly referencing a cell whose value has changed - e.g. the cell that
provides spUnits.
We probably need more information, though.