2017-12-11 2 views
0

Also, ich bin auf der Suche nach einer Reihe von Spalten gleichzeitig aus einem Tabellenblatt löschen, aber ich bekomme einen Laufzeitfehler '1004': Löschen Methode des Bereichs fehlgeschlagen. Meine Blätter sind nicht geschützt, aber das Blatt, das ich löschen möchte, ist eine Tabelle. Ich habe einige Beispiele gesucht, aber sie haben die Probleme nicht korrigiert, alle scheinen den gleichen Fehler zu ergeben. Hier ist, was ich habe:1004 Löschbereich für Spalten fehlgeschlagen

Sub Table_Creator() 

Worksheets("Sheet2").Cells.Copy 
Worksheets("Sheet3").Range("A1").Select 'cause some times excel hates me unless I use this 
Worksheets("Sheet3").Paste 

Dim rng As Range 

Set rng = Worksheets("Sheet3").Range("A:R").Columns 

Sheet3.ListObjects.Add(xlSrcRange, rng, , xlYes).Name = "ComTable" 

Application.EnableEvents = False 

Range("A:A,C:C,E:E,G:G,I:I,K:K,M:M,O:Q").EntireColumn.Delete Shift:=xlToLeft 'errors on this line with the aforementioned error 

Application.EnableEvents = True 

Worksheets("Sheet3").AutoFit 

End Sub 

Was bin ich dabei? Habe ich etwas hinzugefügt, das ich nicht haben sollte?

+1

Sie sollten 'ListObject'' 'ListColumns' -Eigenschaft verwenden und sie in Schleife (bacwards) löschen. – JohnyL

+0

@JohnyL Könntest du mir ein Beispiel geben, das habe ich vorher noch nicht benutzt oder zumindest denke ich nicht. – George

Antwort

0

Ein weiterer Ansatz, laut JohnyLs Kommentar. Ich interpretiere "O: Q" als "O, R", aber wenn das falsch ist, wird der Code eine kleine Änderung benötigen.

Sub Table_Creator() 

Dim rng As Range, c As Long, t As ListObject 

With Worksheets("Sheet3") 
    Worksheets("Sheet2").Cells.Copy .Range("A1") 
    Set rng = .Range("A:R") 
    Set t = .ListObjects.Add(xlSrcRange, rng, , xlYes) 
    t.Name = "ComTable" 

    Application.EnableEvents = False 
    For c = t.DataBodyRange.Columns.Count - 1 To 1 Step -2 
     t.ListColumns(c).Delete 
    Next c 
    t.ListColumns(t.DataBodyRange.Columns.Count - 1).Delete 
    Application.EnableEvents = True 

    t.Range.Columns.AutoFit 
End With 

End Sub 
+0

Ich brauche die Daten in Spalte R, also wird das für diese Instanz funktionieren? – George

+0

Nicht sicher, was du meinst. Ich schlage vor, Sie versuchen es und berichten dann, wenn es nicht wie erwartet funktioniert. – SJR

+0

Ok, ich habe einen Sprung gemacht und es funktioniert, meistens hat es Spalte P nicht gelöscht. Habe alle anderen aber. – George

0

Problem von Bereich ("A: A, C: C, E: E, G: G, I: I, K: K, M: M, O: Q"). EntireColumn. das ist keine korrekte Notation.

Sie listen die Bereiche für die Spalten aus, kann aber nur eine Schleife mit Schritt verwenden -2 zwischen ihnen zu erhalten und die gruppierten Spalten zuerst angeben (O: Q):

Dim i as Long 
Range(Columns("O"), Columns("Q")).Delete Shift:=xlToLeft 
For i = 13 to 1 Step -2 'Where 13 = "L" and 1 = "A" 
    Columns(i).Delete Shift:=xlToLeft 
Next i 
Verwandte Themen