Posted to microsoft.public.excel.misc
|
|
WEND in VBA
You may be right. I got the code in an email from a colleague and have not
had a chance to test it.
Dave
--
A hint to posters: Specific, detailed questions are more likely to be
answered than questions that provide no detail about your problem.
"Dana DeLouis" wrote:
While Abs(kw - Price) 0.00005
It appears to me that kw could be a typo.
Looking at the code, my guess is that it should be
While Abs(k2 - Price) 0.00005
It appears to loop until k2 (Pv) calculation is reduced to a value close to
Price.
Since "2" is next to "w" on the keyboard, my guess is that it should be k2,
and not kw.
--
HTH :)
Dana DeLouis
Windows XP & Office 2007
"Dave F" wrote in message
...
Interesting point. The VBA I pasted here is from a larger UDF that
calculates the yield on a bond.
Here's the entire function. Perhaps this would explain the purpose of the
loop:
Function B_Yield_ISMA(Sett_d As Date, Mat_D As Date, Cpn As Double, Price
As
Double) As Double
'Calculates the yield of a coupon bearing bond (ISMA)
Dim L As Double, t As Double, sz As Double, T1 As Double, T2 As Double,
T3 As Double
Dim k1 As Double, k2 As Double
Dim n As Long
L = Application.Days360(Sett_d, Mat_D) / 360
n = Int(L)
t = L - n
sz = Cpn * (1 - t)
T1 = Application.Rate(L, Cpn, -Price, 100)
If IsError(T1) Then T2 = -1 Else k1 = (-Application.PV(T1, n, Cpn,
100) + Cpn) / (1 + T1) ^ t - sz
T2 = T1 + 0.00005
k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 + T2) ^ t -
sz
While Abs(kw - Price) 0.00005
T3 = T1 + (Price - k1) * (T2 - T1) / (k2 - k1)
T1 = T2
k1 = k2
T2 = T3
k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 + t) ^ t
- sz
Wend
B_Yield_ISMA = T2
End Function
--
A hint to posters: Specific, detailed questions are more likely to be
answered than questions that provide no detail about your problem.
"Dana DeLouis" wrote:
While Abs(kw - Price) 0.00005
As a side note, it is a little unusual here because both kw & Price do
not
get changed in the loop.
It appears it could cause an endless loop.
Usually, one or both get change in the loop so that eventually kw-Price
falls below .00005.
--
Dana DeLouis
Windows XP & Office 2007
"Dave F" wrote in message
...
Very helpful, thanks.
Dave
--
A hint to posters: Specific, detailed questions are more likely to be
answered than questions that provide no detail about your problem.
"Jim Thomlinson" wrote:
While...Wend is just one of the control flow structures. I personally
prefer
Do...Loop but there is nothing wrong with While...Wend. Check out this
link
on the different control flow structures...
http://msdn.microsoft.com/library/de...7ecff00da4.asp
--
HTH...
Jim Thomlinson
"Dave F" wrote:
What does WEND mean in VBA code, e.g.:
While Abs(kw - Price) 0.00005
T3 = T1 + (Price - k1) * (T2 - T1) / (k2 - k1)
T1 = T2
k1 = k2
T2 = T3
k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 +
t)
^ t
- sz
Wend
Does it merely mean While End, sort of like End If?
Dave
--
A hint to posters: Specific, detailed questions are more likely to
be
answered than questions that provide no detail about your problem.
|