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)