运行时错误'9':下标超出了WorksheetFunction

时间:2015-08-21 18:41:34

标签: vba excel-vba runtime-error excel

我正在尝试编写一个简单的代码来查看数据输入部分并将该数据添加到现有数据表中。我想要复制的行数每次都会更改,因此我尝试使数组能够调整大小以适应。

Dim size As Integer
Dim new_resources() As String
Dim i as Integer

size = worksheetfunction.CountA("E:E") - 1
**ReDim new_resources(size)**
i=1
For i to size
    new_resources(i) = cells(i+1,5)
Next i

我收到以下错误:

  

运行时错误'9':下标超出范围。

在标有**的行上。

3 个答案:

答案 0 :(得分:1)

数组从0开始而不是1.因此将new_resources(i)更改为new_resources(i-1)。

答案 1 :(得分:1)

如果您在ReDim行上收到该错误,则必须表示size小于零,这必须表示COUNTA("E:E")返回零。在尝试size >= 0数组之前,您可能想要声明ReDim。例如:

size = worksheetfunction.CountA("E:E") - 1

If size < 0 Then
    MsgBox "Error! No rows found in column E."
Else
    ReDim new_resources(size)
End If

答案 2 :(得分:1)

这不是WorksheetFunction object的工作方式。在工作表上,这足以传入单元格区域,但不能传入VBA。

Dim sz As Long
Dim new_resources() As String
Dim i as Integer

sz = worksheetfunction.CountA(Range("E:E")) - 1
ReDim new_resources(sz)
i=1
For i to sz
    new_resources(i) = cells(i+1, 5)
Next i

'alternates
sz = worksheetfunction.CountA(Columns(5)) - 1
sz = worksheetfunction.CountA(Cells(1, 5).EntireColumn) - 1

您需要像在其他VBA操作中一样引用工作表上的一个或多个单元格。缺少父工作表让我担心;也许你应该解决这个问题。