Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Call PRICE function via VBA


I'm having problems calling the Excel Price (bond) function within VBA.
I'm trying to build a manual yield function that needs to call excel'
PRICE function. But i get #VALUE

Application.Price(...) does not work.
Application.WorksheetFunction.Price(...) does not work either.

_below_is_my_code:_
Function YIELDMANUAL(vSettlement, vMaturity, vCoupon, vPrice
vRedemption, iFrequency)

Dim vGuess As Variant
Dim vGap As Variant

vGuess = vCoupon.Value 'set Guess rate to coupon
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice

'----------
If vGap 0 Then

Do
vGuess = vGuess + 0.000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap 0

Do
vGuess = vGuess - 0.0000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap < 0

Do
vGuess = vGuess + 0.00000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap 0

Do
vGuess = vGuess - 0.000000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap < 0

Do
vGuess = vGuess + 0.0000000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap 0

Do
vGuess = vGuess - 0.00000000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap < 0

'----------
ElseIf vGap < 0 Then

Do
vGuess = vGuess - 0.000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap < 0

Do
vGuess = vGuess + 0.0000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap 0

Do
vGuess = vGuess - 0.00000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap < 0

Do
vGuess = vGuess + 0.000000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap 0

Do
vGuess = vGuess - 0.0000000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap < 0

Do
vGuess = vGuess + 0.00000000001
vGap = Application.WorksheetFunction.Price(vSettlement, vMaturity
vCoupon, vGuess, vRedemption, iFrequency) - vPrice
Loop While vGap 0
'----------
End If

YIELDMANUAL = vGuess

End Functio

--
jomn
-----------------------------------------------------------------------
jomni's Profile: http://www.excelforum.com/member.php...nfo&userid=774
View this thread: http://www.excelforum.com/showthread.php?threadid=52467

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 510
Default Call PRICE function via VBA

Hi Jomni,

I am just wondering if, in Tools Add Ins, you have ticked off both
Analysis ToolPack, and
Analysis TooPack - VBA ...

HTH
Cheers
Carim

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Call PRICE function via VBA


Yes, the add-in is installed.
I can also call the PRICE function in the worksheet cell.

Must be something wrong in my code

--
jomn
-----------------------------------------------------------------------
jomni's Profile: http://www.excelforum.com/member.php...nfo&userid=774
View this thread: http://www.excelforum.com/showthread.php?threadid=52467

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 510
Default Call PRICE function via VBA

Jomni,

May be I did not express myself clearly enough ...
In addition to the standard addin, there is another addin, dedicated to
VBA
named "Analysis TooPack - VBA "
which needs to be activated for VBA to be operational ...

HTH
Carim

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Call PRICE function via VBA


I have that installed as well :confused

--
jomn
-----------------------------------------------------------------------
jomni's Profile: http://www.excelforum.com/member.php...nfo&userid=774
View this thread: http://www.excelforum.com/showthread.php?threadid=52467



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 762
Default Call PRICE function via VBA

jomni -

1. Load Analysis Tookpak - VBA

2. In your VBA project, use Tools | References to create a reference to the
ToolPak file.

3. In your project, call it like a VBA function (without Application and
without Application.WorksheetFunction).

- Mike
www.mikemiddleton.com


  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Call PRICE function via VBA


Mike,

Great! That surely fixed my problem. I soon found out that my code i
quite cumbersome so I chaged it to use the *Newton-Raphson* method.

The resulting code is shorter and with less iteratons.


Function YIELD_MANUAL(vSettlement, vMaturity, vCoupon, vPrice
vRedemption, iFrequency)

Dim vGuess As Variant
Dim vGap As Variant
Dim vDerivative As Variant

'Set vGuess to coupon
vGuess = vCoupon

'I used For Next so that it stops after 99 tries (but it shouldn't b
that long in theory)
For i = 1 To 99
'vPrice - Price (vGuess) - vPrice
vGap = vPrice - Price(vSettlement, vMaturity, vCoupon, vGuess
vRedemption, iFrequency)
'(Price (vGuess) - Price (vGuess + .001))/ .001
vDerivative = (Price(vSettlement, vMaturity, vCoupon, vGuess
vRedemption, iFrequency) _
- Price(vSettlement, vMaturity, vCoupon, vGuess + 0.001
vRedemption, iFrequency)) / 0.001
'This is the Newton-Raphson formula
vGuess = vGuess - (vGap / vDerivative)
'If resulting vGap is already 0, then end the function
'If vGap = 0 Then GoTo 10
Next i

10 YIELD_MANUAL = vGuess

End Functio

--
jomn
-----------------------------------------------------------------------
jomni's Profile: http://www.excelforum.com/member.php...nfo&userid=774
View this thread: http://www.excelforum.com/showthread.php?threadid=52467

  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 947
Default Call PRICE function via VBA

For i = 1 To 99

As an alternative to a fixed number of loops, here's one idea:

Do
vGap = vPrice - Price(vSettlement, vMaturity, vCoupon, vGuess,
vRedemption, iFrequency)

vDerivative = Price(vSettlement, vMaturity, vCoupon, vGuess,
vRedemption, iFrequency)
vDerivative = (vDerivative - Price(vSettlement, vMaturity, vCoupon,
vGuess + 0.001, vRedemption, iFrequency)) / 0.001

vGuess = vGuess - (vGap / vDerivative)
Loop While Abs(vGap) 0.0000000000001
YIELD_MANUAL = vGuess

--
HTH. :)
Dana DeLouis
Windows XP, Office 2003


"jomni" wrote in
message ...

Mike,

Great! That surely fixed my problem. I soon found out that my code is
quite cumbersome so I chaged it to use the *Newton-Raphson* method.

The resulting code is shorter and with less iteratons.


Function YIELD_MANUAL(vSettlement, vMaturity, vCoupon, vPrice,
vRedemption, iFrequency)

Dim vGuess As Variant
Dim vGap As Variant
Dim vDerivative As Variant

'Set vGuess to coupon
vGuess = vCoupon

'I used For Next so that it stops after 99 tries (but it shouldn't be
that long in theory)
For i = 1 To 99
'vPrice - Price (vGuess) - vPrice
vGap = vPrice - Price(vSettlement, vMaturity, vCoupon, vGuess,
vRedemption, iFrequency)
'(Price (vGuess) - Price (vGuess + .001))/ .001
vDerivative = (Price(vSettlement, vMaturity, vCoupon, vGuess,
vRedemption, iFrequency) _
- Price(vSettlement, vMaturity, vCoupon, vGuess + 0.001,
vRedemption, iFrequency)) / 0.001
'This is the Newton-Raphson formula
vGuess = vGuess - (vGap / vDerivative)
'If resulting vGap is already 0, then end the function
'If vGap = 0 Then GoTo 10
Next i

10 YIELD_MANUAL = vGuess

End Function


--
jomni
------------------------------------------------------------------------
jomni's Profile:
http://www.excelforum.com/member.php...fo&userid=7744
View this thread: http://www.excelforum.com/showthread...hreadid=524671



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Function for price qoutation help winnie123 Excel Worksheet Functions 1 June 29th 09 05:55 AM
PRICE function, Pls help aozora Excel Worksheet Functions 1 March 22nd 09 09:51 AM
Reverse PRICE function ingmar Excel Worksheet Functions 32 November 6th 08 04:26 AM
Price Function snowsnow Excel Worksheet Functions 4 November 8th 07 02:12 PM
Price Function Error? Mike Excel Worksheet Functions 0 August 17th 06 05:53 PM


All times are GMT +1. The time now is 07:52 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"