View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Dave Peterson Dave Peterson is offline
external usenet poster
 
Posts: 35,218
Default UDF returning #value

Try changing this one line:
nSecondsPerDay = 60 * 60 * 24
to
nSecondsPerDay = 60# * 60 * 24
or
nSecondsPerDay = 86400
or
nSecondsPerDay = 86400#

60 * 60 * 24 are all integers. Since they're all integers, excel's VBA wants to
use an integer to hold that product (60*60*24). But 86400 is too large to be
held in an integer--and so you get an overflow error.

By using 60#, I've made that 60 a double. So excel's VBA will use a double to
hold that product and everything will (er, should) work ok.



tim wrote:

Howdy;

I have the following UDF that keeps returning #value in the worksheet. When
I debug, it appears to bring in the right values, and does the calcs, at
least through the nSecondsPerDay.

Help or guidance would be apprecicated.

Regards
Tim
-----

Function MixVelocity2007(OilRate_mbd As Double, WaterRate_mbd As Double, _
GasRate_mscfd As Double, Pressure_psi As Double, Temperature_F As Double, _
PipeID_in As Double) As Double

Dim nLiquidRate As Double
Dim nGasRate As Double
Dim nTempConversion As Double
Dim nPipeIDArea As Double
Dim nSecondsPerDay As Double

nLiquidRate = (OilRate_mbd + WaterRate_mbd) * 5.6146
nGasRate = GasRate_mscfd * 1000 * (14.7 / Pressure_psi)
nTempConversion = ((Temperature_F - 32) * (5 / 9) + 273.15) / 288.15
nPipeIDArea = (PipeID_in / 12) ^ 2 * 3.1415 / 4
nSecondsPerDay = 60 * 60 * 24

MixVelocity2007 = (nLiquidRate + (nGasRate * nTempConversion)) / _
(nPipeIDArea * nSecondsPerDay)

End Function


--

Dave Peterson