2016-09-25 5 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 값을 삭제할. –

+1

어떤 줄이 오류라고 말할 수 있습니까? 내 가정은 코드가 시트를 찾을 수 없다는 것입니다 ("제목 없음"). – Davesexcel

답변

5

나는 당신이 xlDown을 사용하는 문제

  1. 의 커플 마지막 셀을 찾아 참조하십시오. 나는 마지막 행을 찾는 방법에 관한 THIS 링크를 보길 권합니다.

  2. Excel에서 참조하는 시트를 찾을 수 없기 때문에 Runtime Error 9 Subscript out of range 오류가 발생합니다. 시트가 있는지 확인하십시오. Untitled 시트를 시각적으로 볼 수 있다면 시트 이름의 앞뒤에 공백이 있다고 생각합니다.

  3. 해당 문제를 해결하면 다음에 얻을 수있는 오류는 Runtime error 438: Object doesn't support this property or method입니다. 그리고 cells 대신 cell을 사용하고 있기 때문입니다. 예를 .cell(i, 1)를 들어 .Cells(i, 1)해야하며, .cell(i + 1, 1)Sheets("Untitled") 다음 Rows(i).Delete 잘못된 시트에서 삭제됩니다 활성 시트가 ​​아닌 경우

  4. .Cells(i + 1, 1) 다른 개체를 선언해야한다; 루프에서 행을 삭제

  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 
관련 문제