运行时错误5 VBA Excel中使用数组时

我在Excel 2007,OS:windows vista上使用vba,用有限差分格式的运动波动方程进行计算。 但是,当它运行运行时5(无效的过程调用或参数)消息出现。 我真的没有什么问题。 任何人都可以帮忙

Sub kwave() Dim u(500, 500), yy(500, 500), alpha, dt, dx, m, n, so, r, f, X, L, K As Single Dim i, j As Integer dx = 0.1 dt = 0.01 L = 10 m = 5 / 3 r = 1 f = 0.5 n = 0.025 so = 0.1 'this is slope alpha = 1 / n * so ^ 0.5 X = 0 For i = 0 To 100 Cells(i + 1, 1) = X u(i, 1) = L - so * X X = X + dx Cells(i + 1, 2) = u(i, 1) Next i For j = 0 To 100 For i = 1 To 100 'predictor step u(i, j + 1) = u(i, j) - alpha * dt / dx * (u(i + 1, j) ^ m - u(i, j) ^ m) + (r - f) * dt 'corrector step K = u(i, j + 1) ^ m - u(i - 1, j + 1) ^ m '<<<<----- RUNTIME ERROR 5 HAPPENS AT THIS LINE yy(i, j + 1) = 0.5 * ((yy(i, j) + u(i, j + 1)) - alpha * dt / dx * K + (r - f) * dt) Next i Next j End Sub 

你声明的variables是错误的 – 数组应该存储一个double / single,但是默认是一个变体。 看到这篇文章。

http://www.cpearson.com/excel/declaringvariables.aspx

“关注变数声明一个简单的陈述

VBA允许用一个Dim语句声明多个variables。 我不喜欢这种风格的原因,但其他人喜欢它。 但是,重要的是要记住如何inputvariables。 考虑下面的代码:

Dim J,K,L As Long您可能认为所有这三个variables都声明为Longtypes。 不是这种情况。 只有L被input为Long。 variablesJ和K被键入为Variant。 该声明在function上等同于以下内容:

Dim J As Variant,K As Variant,L As Long对于用Dim语句声明的每个variables,您应该使用As Type修饰符:

Dim J As Long,K As Long,L As Long“

另外,当i = 99和j = 10时,u(99,11)是j + 1,产生一个负数。 请注意,这并不完全引起问题,因为您可以将负数提升为指数。 例如,-5 ^ 3 = -125