Я пытаюсь выполнить условие IF-THEN-ELSE в Access VBA в пределах цикла for. Однако я не могу заставить его выполнить, что я делаю неправильно? Код выглядит следующим образом.Доступ к VBA Else without If
If m < 12 Then
For I = 2 To x
Price1 = 1/((1 + vInterpRate(I - 1))^(m/12))
Price2 = 1/((1 + vInterpRate(I))^(m/12))
LogRtn = Log(Price1/Price2)
RtnSQ = LogRtn^2
WT = (1 - Lambda) * Lambda^(I - 2)
WtdRtn = WT * RtnSQ
SumWtdRtn = SumWtdRtn + WtdRtn
Else
For I = 2 To x
Price1 = Exp((vInterpRate(I - 1)) * (m/12))
Price2 = Exp((vInterpRate(I)) * (m/12))
End If
Исполнительное это дает мне «Else Без Если» ошибка, которая сбивает с толку для меня, потому что есть Если - Тогда утверждение.
Для контекста здесь представлена вся функция.
Function EWMA(Lambda As Double) As Double
Dim Price1 As Double, Price2 As Double
Dim vInterpRate() As Variant
Dim SumWtdRtn As Double
Dim I As Long
Dim m As Double
Dim rec As Recordset
Dim LogRtn As Double, RtnSQ As Double, WT As Double, WtdRtn As Double
m = 3
Dim x As Integer
Set rec = CurrentDb.OpenRecordset("SELECT InterpRate FROM HolderTable")
x = 0
Do While rec.EOF = False
x = x + 1
ReDim Preserve vInterpRate(x)
vInterpRate(x) = rec("InterpRate")
rec.MoveNext
Loop
If m < 12 Then
For I = 2 To x
Price1 = 1/((1 + vInterpRate(I - 1))^(m/12))
Price2 = 1/((1 + vInterpRate(I))^(m/12))
LogRtn = Log(Price1/Price2)
RtnSQ = LogRtn^2
WT = (1 - Lambda) * Lambda^(I - 2)
WtdRtn = WT * RtnSQ
SumWtdRtn = SumWtdRtn + WtdRtn
Else
For I = 2 To x
Price1 = Exp((vInterpRate(I - 1)) * (m/12))
Price2 = Exp((vInterpRate(I)) * (m/12))
End If
Next I
EWMA = SumWtdRtn^(1/2)
End Function
Поскольку вы вызвали цикл For внутри if, следующее должно быть в том же IF-блоке. Поэтому поставьте два 'Next I', один внутри If и другого внутри Else. И избавьтесь от одного после окончания if. –
Когда 'm' ever> = 12? Вы объявляете его m = 3, и он никогда не изменяется. Следовательно, нет необходимости в том, чтобы/then/else блокировать. – Parfait