不使用If访问VBA Else

bee*_*eba 0 ms-access vba access-vba

我试图在For循环中的Access VBA中执行IF-THEN-ELSE条件.但是我似乎无法执行它,我做错了什么?代码如下.

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
Run Code Online (Sandbox Code Playgroud)

执行此操作会给我一个"Else Without If"错误,这对我来说很困惑,因为有一个If - Then语句.

对于上下文,这是整个函数.

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
Run Code Online (Sandbox Code Playgroud)

小智 5

你离这里很近,你只有循环部分或"下一个"部分在错误的位置.尝试:

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
    Next I
Else
    For I = 2 To x
        Price1 = Exp((vInterpRate(I - 1)) * (m / 12))
        Price2 = Exp((vInterpRate(I)) * (m / 12))
    Next I
End If
Run Code Online (Sandbox Code Playgroud)