2016-06-28 18 views
0

Ich habe den folgenden Code, der effektiv drei Zeilen in einem bestimmten Arbeitsblatt löscht (Bereiche suchen usw.). Diesen Code habe ich mindestens ein Jahr ohne Probleme benutzt. Allerdings habe ich diesen Code kürzlich in ein neues Arbeitsbuch übertragen und ein Arbeitsblatt eingerichtet, das genau mit dem vorherigen Arbeitsbuch übereinstimmt.Laufzeitfehler 1004 beim Löschen einer ausgewählten Zeile

Die Codefehler in dem unten mit der Fehlermeldung markiert

Laufzeitfehler ‚1004‘

Delete-Methode des zulässigen Bereichs Klasse

fehlgeschlagen

Kann jemand empfehlen, warum dieser Fehler auftreten würde?

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

Haben Sie definitiv einen benannten Bereich "Total_1" in dem neuen Arbeitsblatt? – Clusks

+0

@Sean Bailey beginnt der von "Total_1" genannte Bereich von Zeile 1 oder 2? –

+0

Sie sollten wirklich '.Select' nicht verwenden, es ist sehr langsam und erzeugt leicht Fehler. –

Antwort

0

Wie in den Kommentaren erwähnt, sollten Sie immer von der letzten Zeile aus beginnen und sich beim Löschen von Zeilen in die erste Zeile arbeiten. Ich vermute, dass Ihr Problem dadurch verursacht wird. Ohne Ihre Daten zu sehen, würde ich vorschlagen, von Total_2 zurück zu Total zu arbeiten. Außerdem sollten Sie möglichst keine Select verwenden. Versuchen Sie, Ihren Code zu dieser Modifikation:

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 

Stellen Sie sicher, irgendwann Application.ScreenUpdating wieder auf true gesetzt, wie gut.

+1

* Stellen Sie sicher, dass Application.ScreenUpdating zurück auf True * - das ist eigentlich nicht notwendig. Es automatisch umdrehen Zurück nach dem Modul läuft –

+0

Guter Punkt @ScottHoltzman – TheEngineer

+0

Danke, das funktioniert besser als mein aktueller Code und hat das Problem gelöst :) –

Verwandte Themen