我遇到了以下问题。我正在创建一个带有活动x元素的excel工作表来计算几个值(对于大学里的一个类)。在下面的代码中,我有时(不是每次都)得到运行时错误9,索引超出范围(希望我把它正确地翻译成英文)。我是vba的新手。我知道已经有几个类似的问题已经被问到了,但是我有一个很大的问题需要让解决方案适应我的代码,因为我不太了解代码中的问题以及他们问题的解决方案。
我标记了星星发生错误的行。
如果有人能解释一下,为什么有时会在我的代码中出现这个问题以及如何正确解决它,我真的很感激。 提前谢谢。
以下是代码:
Sub calcinull()
Dim ione(4), itwo(4), ii, ints(4), cs(4), io, it As Double
Dim a, b, c As Double
ione(0) = 0
ione(1) = 10
ione(2) = 20
ione(3) = 30
ione(4) = 40
itwo(0) = 100
itwo(1) = 90
itwo(2) = 80
itwo(3) = 70
itwo(4) = 60
For b = 0 To 4
ii = ione(b) + (((itwo(b) - ione(b)) * (NPV(ione(b))) / (NPV(ione(b)) - NPV(itwo(b)))))
ints(b) = ii
cs(b) = NPV(ii)
Next b
Dim AbsInt(4), AbsCs(4) As Double
For a = 0 To 4
AbsInt(a) = VBA.Abs(ints(a))
AbsCs(a) = VBA.Abs(cs(a))
Next a
Dim pos As Integer
pos = Application.Match(Application.Min(AbsCs), AbsCs, 0)
*ii = ints(pos)*
If NPV(ii) > 0 Then
io = ii
If pos > 0 Then
it = itwo(pos - 1)
Else
it = itwo(0)
End If
ElseIf NPV(ii) < 0 Then
it = ii
If pos > 0 Then
io = ione(pos - 1)
Else
io = ione(0)
End If
ElseIf NPV(ii) = 0 Then
inull = ii
End If
For c = 1 To 30
Do Until (NPV(io) - NPV(it)) <> 0
io = io - 0.1
it = it + 0.1
Loop
ii = io + (((it - io) * (NPV(io)) / (NPV(io) - NPV(it))))
If NPV(ii) > 0 Then
io = ii
If it > (io + 0.5) Then
it = it - 0.5
End If
ElseIf NPV(ii) < 0 Then
it = ii
If io < (it - 0.5) Then
io = io + 0.5
End If
ElseIf NPV(ii) = 0 Then
inull = ii
Exit For
End If
Next c
inull = ii
End Sub
答案 0 :(得分:0)
由于ints
是一个包含5个元素(0..4)的数组,因此pos
可能是&gt; 4发生此错误时。
如果你不知道为什么,可能会在Match
- Statement后面添加这样的内容,并在测试时为print
设置一个断点。
if pos < 0 or pos > 4 then
debug.print pos & " is off"
end if
答案 1 :(得分:0)
好吧,伙计们,我解决了。问题是,数组使用从0到x的索引,而位置给出数组的第n个位置,这意味着我的&#34; pos&#34; -variable总是比数组索引高一个整数。
谢谢大家的帮助!