【问题标题】:Getting Runtime error 9 - Subscript out of range出现运行时错误 9 - 下标超出范围
【发布时间】:2016-09-25 10:58:01
【问题描述】:

运行以下代码时出现运行时错误。

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

【问题讨论】:

  • 我想删除重复项中的第一个值。
  • 你能说哪一行给出了错误,我的假设是代码找不到工作表(“Untitled”)

标签: excel vba


【解决方案1】:

我发现了几个问题

  1. 您正在使用xlDown 查找最后一个单元格。我建议查看THIS 链接,了解如何找到最后一行。

  2. 您收到错误 Runtime Error 9 Subscript out of range,因为 Excel 找不到您所指的工作表。请确保工作表存在。如果您可以直观地看到 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

【讨论】:

    猜你喜欢
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多