在Excel中使用Array时VBA运行时错误9

时间:2016-06-30 20:14:40

标签: excel vba excel-vba

下面是表示给定机器的效率与日期的图片。效率不是每天都在进行,而是在随机日期进行。然后重复该效率直到增加新的效率。因此,在我们的案例中,在#1,3,10和#1日进行了独特的效率。 12.然而,您可以看到效率可能会重复,因此第3天和第3天12效率相同.. 我们不能使用命令Remove Dublicates

enter image description here

任务是选择那些在第1,3,10和1天进入效率的日期。 12,使用VBA我有点能够做到这一点,但它最终会抛出错误9?

Sub AutoEffRemove()
Dim rangeToUse As Range, cell1 As Range, i As Integer, RowCount As Integer, MyArray() As Variant
Set rangeToUse = Selection
    For Each cell1 In Selection
        If cell1.Value = cell1.Offset(-1, 0).Value Then
        ReDim Preserve MyArray(RowCount)
        MyArray(RowCount) = cell1.Row
        RowCount = RowCount + 1
        End If
    Next cell1
    For i = 0 To WorksheetFunction.Count(MyArray)
    Rows(MyArray(i)).EntireRow.Delete
    'MsgBox MyArray(i)
    Next i
End Sub

MsgBox& Count(MyArray)确实表示代码定位所需的行

1 个答案:

答案 0 :(得分:1)

导致错误是因为您的最终For循环应该从lbound(MyArray)到ubound(MyArray),或者从0到WorksheetFunction.Count(MyArray)-1。

此外,您的最终循环不会删除您希望删除的行。删除第一行后(示例中的第4行),所有其他单元格将向上移动一行,因此下一次删除(第6行)将实际删除最初的第7行。

所以你最好从ubound(MyArray)到lbound(MyArray)步骤-1执行最后一个循环。