вы действительно должны использовать Option Explicit
:
Option Explicit
Public Function CFR(df(), x As Double, t As Integer) As Double
Dim i As Long, y As Integer
Dim discount() As Double
Dim nom, denom As Double
ReDim discount(t) As Double
y = 1
For i = UBound(df, 1) + 1 To t
discount(i) = df(UBound(df, 1)) * (x ^ y)
y = y + 1
Next i
nom = (1 - df(UBound(df)) * x ^ (t - UBound(df)))
denom = Application.WorksheetFunction.Sum(df) + Application.WorksheetFunction.Sum(discount)
CFR = nom / denom
End Function
Проблемы были
1) denim
вместо denom
, использование которых Option Explicit
обнаружил бы вас немедленно
2) Dim discount()
Поскольку VBA предполагает неявный тип Variant
для всех не объявленных явно переменных, и это делает его конфликтующим с последующими ReDim discount(t) As Double
, так как инструкция Redim () не может изменить тип массива
3) объяснение пункта 2 относится к незначительной проблеме (в данном случае код не блокируется):
Dim i, y As Integer
фактически читается как:
Dim i As Variant, y As Integer
Если вы хотите, чтобы i
был integer
типа, вы должны ввести код:
Dim i As Integer, y As Integer