运行-时间错误“9”:WorksheetFunction 的下标超出范围

Run-Time Error '9': subscript out of range with WorksheetFunction

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

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

我收到以下错误:

Run-time error '9': Subscript out of range.

在标有**的行上。

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

如果您在 ReDim 行中遇到该错误,那一定意味着 size 小于零,这一定意味着 COUNTA("E:E") 正在返回零。在尝试 ReDim 你的数组之前,你可能想断言 size >= 0 。例如:

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

那不是 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 操作中一样引用工作表上的一个或多个单元格。缺少家长工作表让我很担心;也许你也应该解决这个问题。