type-declaration字符与声明的数据类型不匹配

时间:2014-08-07 01:34:24

标签: vba

我不断根据下面的代码得到这个编译错误,我无法弄清楚我的生活。你们能看出问题所在吗?它突出了" p"当我回去调试时。

谢谢, [R

Function EuroBin(S, K, T, rF, sigma, n, PutCall As String)
dt = T / n: u = Exp(sigma * Sqr(dt))
d = 1 / u: p = (Exp(rF * dt) - d) / (u - d)
EuroBin = 0
For i = 0 To n
    Select Case PutCall
        Case "Call":
            EuroBin = WorksheetFunction.Combin(n, i) * EuroBin + p^(i) * (1 - p) ^ (n - i) * WorksheetFunction.Max(S * u^(i) * d^(n - i) - K, 0)
        Case "Put":
            EuroBin = WorksheetFunction.Combin(n, i) * EuroBin + p^(i) * (1 - p) ^ (n - i) * WorksheetFunction.Max(K - S * u^(i) * d^(n - i), 0)
    End Select
Next i
EuroBin = Exp(-rF * T) * EuroBin
End Function

2 个答案:

答案 0 :(得分:1)

对于取幂,请使用

WorksheetFunction.Power(b, e)

而不是b^e,这似乎在VBA中无效!

我是根据测试Debug.Print 2^2说的,它返回2 2; Debug.Print WorksheetFunction.Power(2, 2)会返回4

答案 1 :(得分:1)

在32位Excel VBA中使用插入符号^时,幂运算的效果与您期望的一样。仅在64位Excel VBA中无法正常工作。

在64位Excel VBA中,插入记号是LongLong变量类型​​的类型声明字符。因此,当您输入数字后跟插入号或变量名,然后输入插入号时,VBA假定您正在谈论的是LongLong常数或变量。做完这个假设后,它会尝试解析表达式,并给您一个运行时错误或意外结果。

如果将常量或变量括在(a)^ b或(2)^ 3等括号中,则可以使用插入符号在64位Excel VBA中执行幂运算。这是我建议的做法,因为它也可以在32位Excel VBA中正常工作。

您可能还会注意到,插入符号加倍似乎可以正确取幂-但这仅适用于整数。第一个插入符号将您的整数转换为LongLong,而第二个插入符号执行取幂。但是您通常不能指望这种行为,因为2.3 ^^ 3会引发运行时错误(因为2.3不能是LongLong)。而且,如果您的代码同时在32位和64位Excel中使用,则将插入符号加倍将在32位Excel中产生运行时错误。由于这些原因,我建议不要将插入符号加倍。

相关问题