Zelleninhalte in VBA mit Spaltenreferenz löschen

Ich versuche, ein Stück Code zu bekommen, um die Daten in einigen Zellen zu löschen, mit der Spalte Referenzen. Ich verwende den folgenden Code:

Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents

Um dies zu tun, erhalte ich jedoch einen Fehler im ersten Abschnitt "Cells", warum ist das so?

Lösung

Sie können auf ganze Spalten als Bereich zugreifen, indem Sie das Objekt Worksheet.Columns verwenden

Etwa so:

Worksheets(sheetname).Columns(1).ClearContents 

sollte den Inhalt der Spalte A löschen

Es gibt auch das Worksheet.Rows Objekt, wenn Sie etwas Ähnliches für Zeilen tun müssen


Der Fehler, den Sie erhalten, ist wahrscheinlich auf einen fehlenden with-Block zurückzuführen.

Sie können hier über with-Blöcke lesen: Microsoft-Hilfe

Kommentare (0)

Wie Gary's Student erwähnte, müssten Sie den Punkt vor Cells entfernen, damit der Code so funktioniert, wie Sie ihn ursprünglich geschrieben haben. Ich kann mir nicht sicher sein, da Sie nur die eine Codezeile eingefügt haben, aber der Fehler, der beim Löschen der Punkte auftrat, könnte etwas damit zu tun haben, wie Sie Ihre Variablen definiert haben.

Ich habe Ihre Code-Zeile mit den als Ganzzahlen definierten Variablen ausgeführt und es hat funktioniert:

Sub TestClearLastColumn()

    Dim LastColData As Long
        Set LastColData = Range("A1").End(xlToRight).Column

    Dim LastRowData As Long
        Set LastRowData = Range("A1").End(xlDown).Row

    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents

End Sub

Ich glaube nicht, dass eine "With"-Anweisung für die von Ihnen geteilte Codezeile angemessen ist, aber wenn Sie eine verwenden würden, würde die "With"-Anweisung am Anfang der Zeile stehen, die das Objekt definiert, das Sie manipulieren. Hier ist Ihr Code, der mit einer unnötigen "With"-Anweisung umgeschrieben wurde:

With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
    .ClearContents
End With

Die "With"-Anweisungen sollen Ihnen das Abtippen von Code ersparen und die Lesbarkeit Ihres Codes verbessern. Sie sind nützlich und angemessen, wenn Sie mehr als eine Sache mit einem Objekt tun. Wenn Sie zum Beispiel die Spalte rot färben und einen dicken schwarzen Rand hinzufügen möchten, könnten Sie eine With-Anweisung wie diese verwenden:

With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
    .ClearContents
    .Interior.Color = vbRed
    .BorderAround Color:=vbBlack, Weight:=xlThick
End With

Andernfalls müssten Sie den Bereich für jede Aktion oder Eigenschaft angeben, etwa so:

    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents
    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).Interior.Color = vbRed
    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).BorderAround Color:=vbBlack, Weight:=xlThick

Ich hoffe, dies gibt Ihnen ein Gefühl dafür, warum Gary's Student glaubte, dass der Compiler ein With erwarten könnte (obwohl es unangebracht war) und wie und wann ein With in Ihrem Code nützlich sein kann.

Kommentare (1)

Sie benötigen eine With-Anweisung vor dieser. Oder machen Sie die .Cells zu Cells

Kommentare (1)