运行以下代码时出现运行时错误。
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
答案 0 :(得分:5)
我看到了几个问题
您正在使用xlDown
查找最后一个单元格。我建议您查看有关如何查找最后一行的THIS链接。
您收到错误Runtime Error 9 Subscript out of range
,因为Excel无法找到您所指的工作表。请确保表格存在。如果您可以直观地看到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