2016-09-25 67 views
2

運行下面的代碼時出現運行時錯誤。運行時錯誤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 
+0

我想刪除重複的第一個值。 –

+1

你可以說什麼行給出錯誤,我的假設是代碼找不到工作表(「無標題」) – Davesexcel

回答

5

我看到幾個正在使用xlDown問題

  1. 找到最後一個單元格。我會建議看到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 
相關問題