2016-06-28 1 views
0

지정된 워크 시트 (범위 찾기 등)에서 세 줄을 효과적으로 삭제하는 코드가 있습니다. 이 코드는 적어도 1 년 동안 아무런 문제없이 사용했습니다. 그러나 나는 최근에이 코드를 새로운 작업 북으로 옮기고 이전 통합 문서와 정확히 같은 워크 시트를 설정했습니다.선택한 행을 삭제할 때 런타임 오류 1004가 발생했습니다.

오류 메시지

런타임 오류 '1004'

범위 클래스의

삭제 방법이 오류가 발생하는 이유 누군가가 제안 할 수

실패 와 함께 아래에 강조 코드 오류가?

Sub DeleteRowPIC() 

Application.ScreenUpdating = False 
Application.Calculation = xlManual 
ActiveSheet.Unprotect Password:="Projects123" 
ActiveSheet.Range("Total").Select 
If Selection.Row = 12 Then 
Else 
ActiveSheet.Range("Total").Select 
Selection.Offset(-2, 0).Select 
ActiveCell.EntireRow.Delete 

ActiveSheet.Range("Total_1").Select 
Selection.Offset(-2, 0).Select 
ActiveCell.EntireRow.Delete **ERROR OCCURS HERE** 

ActiveSheet.Range("Total_2").Select 
Selection.Offset(-2, 0).Select 
ActiveCell.EntireRow.Delete 

End If 
Range("K2").Select 
Application.Calculation = xlAutomatic 
With ActiveSheet 

     .Protect Password:="Projects123", UserInterfaceOnly:=True 
     .EnableOutlining = True 
End With 
+1

새 워크 시트에 이름이 지정된 범위 "Total_1"이 있습니까? – Clusks

+0

@Sean Bailey는 "Total_1"이라는 이름의 범위가 1 행 또는 2 행에서 시작됩니까? –

+0

정말로'.Select'를 사용하면 안되며, 속도가 매우 느리고 쉽게 오류가 발생합니다. –

답변

0

주석에서 언급했듯이 행을 삭제할 때 항상 마지막 행에서 시작하여 첫 번째 행으로 이동해야합니다. 나는 당신의 문제가 이것으로 인한 것 같아요. 귀하의 데이터를 보지 않고 Total_2에서 Total으로 다시 돌아가시기 바랍니다. 또한 가능한 경우 Select을 사용하지 않는 것이 좋습니다. 이 당신의 코드를 수정 해보십시오 :

Sub DeleteRowPIC() 

Dim ws As Worksheet 

Application.ScreenUpdating = False 
Application.Calculation = xlManual 

Set ws = ActiveSheet 
With ws 
    .Unprotect Password:="Projects123" 
    If .Range("Total").Row <> 12 Then 
     .Range("Total_2").Offset(-2, 0).EntireRow.Delete 
     .Range("Total_1").Offset(-2, 0).EntireRow.Delete 
     .Range("Total").Offset(-2, 0).EntireRow.Delete 
    End If 
    Application.Calculation = xlAutomatic 
    .Protect Password:="Projects123", UserInterfaceOnly:=True 
    .EnableOutlining = True 
End With 

당신이뿐만 아니라 어느 시점에서 다시 true로 Application.ScreenUpdating을 설정해야합니다.

+1

* Application.ScreenUpdating을 true로 설정했는지 확인하십시오. * 실제로는 필요하지 않습니다. 모듈을 실행 한 후 다시 실행 –

+0

좋은 점 @ScottHoltzman – TheEngineer

+0

감사합니다.이 코드는 현재 코드보다 잘 작동하며 문제가 해결되었습니다. :) –