运行时错误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
我看到几个问题
-
您正在使用
xlDown
来查找最后一个单元格。 我会build议看到这个链接如何find最后一行。 -
由于Excel找不到您引用的工作表,因此出现
Runtime Error 9 Subscript out of range
。 请确保工作表存在。 如果您可以直观地看到“Untitled
表,那么我相信工作表名称具有前导空格或尾随空格。 -
一旦你解决了这个问题,你将得到的下一个错误是
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)
-
如果
Sheets("Untitled")
不是活动工作表,则声明您的对象,然后Rows(i).Delete
将从错误工作表中删除;) -
避免在循环中删除行。 它只会让你的代码变慢。 看看我在下面的代码中如何使用
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