尝试从VBA中的数组中删除空值时下标错误

时间:2014-08-01 13:07:25

标签: arrays excel-vba subscript vba excel

我正在尝试运行Simple公式来从数组中删除空白条目。我使用的数组是从我在excel中设置的数据表中的字段加载的,称为TY。该字段的名称为TY [L3 Number]。我想保持这个数组动态,因为它可能会随着用户添加或删除数据表中的行而改变。我使用的测试数据有218行,其中210行有重复的条目(我将在稍后删除),以及8条""。

运行宏时,我得到一个运行时错误9"下标超出范围"在我的if语句的第一行。

我花了好几个小时试图理解为什么VBA会给我这个错误。我的理解是,这是因为数组的大小不正确,无法处理传递给它的数据。我已经使用调试窗口来验证两个数组的大小是否正确。

我对编程非常陌生,在我去的时候自学,但我很乐意找到自己的解决方案。

Sub BuildArray()

'   Load array

Dim MyArr()
Dim J As Long


'   Size array

MyArr() = Range("TY[L3 Number]")
ReDim NewArr(LBound(MyArr) To UBound(MyArr))

'   For Loop to search for Blanks and remove from Array
'   The Lbound and UBound parameters will be defined by the size of the TY[L3 Number] field in the TY Table

J = LBound(MyArr) - 1 ' Added this recently while testing the theory that J may start at the 2nd      index in the loop, did not help

For i = LBound(MyArr) To UBound(MyArr)
   If MyArr(i) <> "" Then '   This is where I error out
        J = J + 1
        NewArr(J) = MyArr(i)
  End If
Next i
ReDim Preserve NewArr(LBound(MyArr) To J)

'   Debug Window to show results of revised array.

Dim c As Long
For c = LBound(NewArr) To UBound(NewArr)
   Debug.Print NewArr(c)
Next
   Debug.Print "End of List"

End Sub

1 个答案:

答案 0 :(得分:1)

范围是多维数组..(即MyArray(#,#) 其中第一个索引是行,第二个索引是列。

更改

 If MyArr(i) <> "" Then 

 If MyArr(i,1) <> "" Then 

如果您的范围只有一列,则第二个索引将始终为1