运行时错误9 – 下标超出范围

我运行下面的代码时遇到运行时错误。

Sub em() Dim strlogin As String Dim strnextlogin As String For i = 2 To Range("A1").End(xlDown).Row strlogin = Sheets("Untitled").cell(i, 1) strnextlogin = Sheets("Untitled").cell(i + 1, 1) If (strlogin = strnextlogin) Then Rows(i).Delete i = i - 1 End If Next i End Sub 

我看到几个问题

  1. 您正在使用xlDown来查找最后一个单元格。 我会build议看到这个链接如何find最后一行。

  2. 由于Excel找不到您引用的工作表,因此出现Runtime Error 9 Subscript out of range 。 请确保工作表存在。 如果您可以直观地看到“ Untitled表,那么我相信工作表名称具有前导空格或尾随空格。

  3. 一旦你解决了这个问题,你将得到的下一个错误是Runtime error 438: Object doesn't support this property or method 。 那是因为你正在使用cell而不是cells 。 例如.cell(i, 1)应该是.Cells(i, 1).cell(i + 1, 1)应该是.Cells(i + 1, 1)

  4. 如果Sheets("Untitled")不是活动工作表,则声明您的对象,然后Rows(i).Delete将从错误工作表中删除;)

  5. 避免在循环中删除行。 它只会让你的代码变慢。 看看我在下面的代码中如何使用delRange

修复这些事情,你会很好去

注意:

 Option Explicit Sub em() Dim delRange As Range Dim ws As Worksheet Dim i As Long, LRow As Long Set ws = ThisWorkbook.Sheets("Untitled") With ws LRow = .Range("A" & .Rows.Count).End(xlUp).Row For i = LRow To 2 Step -1 '~~> Even 2 To LRow will work :) If .Cells(i, 1) = .Cells(i + 1, 1) Then If delRange Is Nothing Then Set delRange = .Rows(i) Else Set delRange = Union(delRange, .Rows(i)) End If End If Next i If Not delRange Is Nothing Then delRange.Delete End With End Sub