2017-10-13 129 views
0

为什么我的行T(k) = Cells(k + 1, 4).Value - z上会出现“下标超出范围”?VBA _Error 9下标超出范围

Public Sub find() 
Dim i, j, k, h As Integer 
Dim T() As Double 
Dim z As Double 
Range("E1").Activate 
i = ActiveCell.Row 
j = ActiveCell.Column 
While Not IsEmpty(Cells(i, j - 2).Value) 
    z = Cells(i, j - 2).Value 
    k = 0 
While Not IsEmpty(Cells(k + 1, 4).Value) 
    T(k) = Cells(k + 1, 4).Value - z 
    k = k + 1 
Wend 
    For h = 0 To k 
    If T(h) = Application.WorksheetFunction.Min(Abs(T(k))) Then 
    Cells(i, j).Value = Cells(h + 1, 4).Value 
    End If 
    Next 
i = i + 1 
Wend 
End Sub 
+0

[填充VBA动态数组]的可能的复制(https://stackoverflow.com/questions/8850984/populating-vba-dynamic-arrays) –

+0

这个问题解决您的问题:https://开头stackoverflow.com/questions/8850984/populating-vba-dynamic-arrays/8851086#8851086确保阅读不仅仅是第一个答案! –

回答

0

,在您说T(k) = ...点,你的阵列T尚未分配。目前还没有T(0)这样的东西。因此“下标超出范围”错误。

在索引到T之前,您必须使用ReDimT一个大小。例如:

Dim T() As Double 
ReDim T(0 to 123) ' or whatever size you need