Ich versuche, einen Code zu erhalten, um die Daten in einigen Zellen mithilfe der Spaltenverweise zu löschen. Ich verwende den folgenden Code:
Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents
Dafür bekomme ich jedoch beim ersten Abschnitt .Cells einen Fehler. Warum ist das so?
Sie können auf die gesamte Spalte als Bereich mit dem Worksheet.Columns
-Objekt zugreifen
So etwas wie:
Worksheets(sheetname).Columns(1).ClearContents
sollte den Inhalt einer A-Spalte löschen
Es gibt auch das Worksheet.Rows
-Objekt, wenn Sie für Zeilen etwas Ähnliches tun müssen
Der Fehler, den Sie erhalten, ist wahrscheinlich auf einen fehlenden Block zurückzuführen.
Sie können hier über Blöcke lesen: Microsoft-Hilfe
Wie Garys Student erwähnt hat, müssten Sie den Punkt vor Cells
entfernen, damit der Code so funktioniert, wie Sie ihn ursprünglich geschrieben haben. Ich kann nicht sicher sein, da Sie nur eine einzige Codezeile enthalten haben, aber der Fehler, den Sie beim Löschen der Punkte erhalten haben, hat möglicherweise etwas mit der Definition Ihrer Variablen zu tun.
Ich habe Ihre Codezeile 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 Codezeile geeignet ist, die Sie freigegeben haben. Wenn Sie jedoch eine solche verwenden würden, würde die With
am Anfang der Zeile stehen, die das zu manipulierende Objekt definiert. Hier wird Ihr Code mit einer unnötigen With
-Anweisung umgeschrieben:
With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
.ClearContents
End With
With
-Anweisungen sollen Sie vor dem erneuten Eingeben von Code schützen und das Lesen der Codierung erleichtern. Es ist sinnvoll und sinnvoll, wenn Sie mit einem Objekt mehr als eine Sache tun. Wenn Sie beispielsweise auch die Spalte rot machen und einen dicken schwarzen Rand hinzufügen möchten, können Sie eine With
-Anweisung wie folgt 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 wie folgt angeben:
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, das gibt Ihnen ein Gefühl dafür, warum Garys Student der Meinung war, dass der Compiler eine With
erwartet (obwohl dies unangemessen war) und wie und wann eine With
in Ihrem Code nützlich sein kann.
Ich habe gerade diese sehr einfache Methode entwickelt, ein ganzes Blatt zu löschen.
Sub ClearThisSheet()
ActiveSheet.UsedRange.ClearContents
End Sub
Um alle Zeilen mit Daten zu löschen, verwende ich zwei Variablen wie diese. Ich mag das, weil Sie es an einen bestimmten Bereich von Spalten anpassen können, wenn Sie ..__ brauchen. Dim CRow As Integer Dim LastRow As Integer
CRow = 1
LastRow = Cells(Rows.Count, 3).End(xlUp).Row
Do Until CRow = LastRow + 1
Cells(CRow, 1).Value = Empty
Cells(CRow, 2).Value = Empty
Cells(CRow, 3).Value = Empty
Cells(CRow, 4).Value = Empty
CRow = CRow + 1
Loop
Für jeden wie mich, der auf dieses Problem gestoßen ist und eine Lösung braucht, die keine Überschriften enthält, ist hier der eine Liner, der für mich funktioniert:
ActiveSheet.Range("A3:A" & Range("A3").End(xlDown).Row).ClearContents
Beginnt in der dritten Reihe - ändern Sie nach Ihren Wünschen.
Sie benötigen vorher eine With -Anweisung. Oder machen Sie die .Cells in Cells
Das Problem betrifft nicht die with-Anweisung, sondern die Range-Funktion. Es akzeptiert nicht den absoluten Zellenwert. Es sollte sich wie Range ("A4: B100") befinden. .
der folgende Code sollte funktionieren .. Konvertiert Zellen (1,1) in "A1" und umgekehrt
LastColData = Sheets(WSNAME).Range("A4").End(xlToRight).Column
LastRowData = Sheets(WSNAME).Range("A4").End(xlDown).Row
Rng = "A4:" & Sheets(WSNAME).Cells(LastRowData, LastColData).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Worksheets(WSNAME).Range(Rng).ClearContents
Ich fand dies eine einfache Art der Reinigung in einer Form zwischen der gewünschten Reihe und Spalte. Ich bin mir nicht sicher, ob Sie das suchen. Ich hoffe es hilft.
Sub sbClearCellsOnlyData()
Range("A1:C10").ClearContents
End Sub