WEND in VBA

D

Dave F

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
 
D

Dana DeLouis

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.
 
D

Dave F

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
 
D

Dana DeLouis

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 said:
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
 
D

Dave F

You may be right. I got the code in an email from a colleague and have not
had a chance to test it.

Dave
 
S

Sandy Mann

Dana DeLouis said:
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.


I seems that when Gord Dibben said to me that other day:
That's why there is a great herd of us monitoring these groups.

he wasn't kidding!

These NG's never cease to amaze me!

--


Sandy
In Perth, the ancient capital of Scotland
and the crowning place of kings

[email protected]
[email protected] with @tiscali.co.uk
 
Top