Hallo zusammen
Ich bin relativ neu im VBA Universum und mache zur Zeit ein paar Tests um die Materie besser zu verstehen.
Ich habe mir entsprechend Übungstabellen runtergeladen, nun bin ich bei einer auf ein Problem gestossen und zwar kriege ich immer den Fehler; "Compile Error: Sub or Function not defined".
Die VBA Addins sind geladen sowie auch atpvbaen.xls. Ich habe jedoch das Gefühl (ich weiss hilft wenig), dass es an der Funktion yearfrac() liegt.
Kann jemand bei den folgenden Zeilen den Fehler herausfinden?
Function Bprice(pricedate, matdate, Coupon, r, freq)
'Inputs:
'.....................................................................................
'pricedate: pricing date;
'matdate: maturity date;
'Coupon: coupon rate, in percentage;
'r: yield to maturity, r=ir+cs;
'freq: payment frequency: annual: 1; semmi-annual: 2; quarterly: 4; monthly: 12;
Dim i As Integer
t = YearFrac(pricedate, matdate)
r = Log(1 + r)
Bprice = 100 * Exp(-r * t)
If Coupon > 0 Then
NumC = WorksheetFunction.Ceiling(t * freq, 1)
For i = 1 To NumC
ti = (t - (i - 1) / freq)
Bprice = Bprice + Coupon / freq * Exp(-r * ti)
Next i
End If
End Function
Sub CBall()
Dim Bond, Stock, PriceInfo, Output, calld, callp, putd, putp, calldata, callprice, putdate, putprice As Range
Dim pricedate, matdate, FaceValue, cratio, Coupon, freq, S, Div, vol, ir, cs, step, softcall As Double
Set Bond = Range("B8")
Set Stock = Range("B17")
Set PriceInfo = Range("B23")
Set Output = Range("F4")
Set calld = Range("E15")
Set callp = Range("F15")
Set putd = Range("H15")
Set putp = Range("I15")
pricedate = Range("B4").Value
matdate = Bond.Value
FaceValue = Bond.Offset(1, 0).Value
cratio = Bond.Offset(2, 0).Value
Coupon = Bond.Offset(3, 0).Value
freq = Bond.Offset(4, 0).Value
S = Stock.Value
Div = Stock.Offset(1, 0).Value
vol = Stock.Offset(2, 0).Value
ir = PriceInfo.Value
cs = PriceInfo.Offset(1, 0).Value
step = PriceInfo.Offset(2, 0).Value
softcall = Range("F12").Value
If IsEmpty(calld) Then
Set calldate = calld
Else
Set calldate = Range(calld, calld.Offset(-1, 0).End(xlDown))
End If
If IsEmpty(callp) Then
Set callprice = callp
Else
Set callprice = Range(callp, callp.Offset(-1, 0).End(xlDown))
End If
If IsEmpty(putd) Then
Set putdate = putd
Else
Set putdate = Range(putd, putd.Offset(-1, 0).End(xlDown))
End If
If IsEmpty(putp) Then
Set putprice = putp
Else
Set putprice = Range(putp, putp.Offset(-1, 0).End(xlDown))
End If
Output.Value = CBprice(pricedate, matdate, FaceValue, cratio, Coupon, freq, S, Div, vol, ir, cs, step, calldate, callprice, softcall, putdate, putprice)
Output.Offset(1, 0).Value = CBdelta(pricedate, matdate, FaceValue, cratio, Coupon, freq, S, Div, vol, ir, cs, step, calldate, callprice, softcall, putdate, putprice)
Output.Offset(2, 0).Value = Bprice(pricedate, matdate, Coupon, ir + cs, freq)
Output.Offset(3, 0).Value = cratio * S / FaceValue * 100
End Sub
Für eure Hilfe bedanke ich mich herzlichst.
Alex
|