使用列参考清除VBA中单元格的内容
我想获得一段代码清除一些单元格中的数据,使用列引用。 我正在使用下面的代码:
Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents
要做到这一点,但是我在第一个.Cells部分出现错误,为什么?
您可以使用Worksheet.Columns
对象作为范围来访问整个列
就像是:
Worksheets(sheetname).Columns(1).ClearContents
应该清楚A列的内容
还有Worksheet.Rows
对象,如果你需要做一些类似的行
您收到的错误可能是由于块丢失。
您可以在这里阅读有关块: Microsoft帮助
正如Gary的学生提到的那样,您需要删除Cells
之前的点,以使代码正常工作。 我不能确定,因为你只包含了一行代码,但是当你删除这些点时你得到的错误可能与你如何定义你的variables有关。
我运行你的代码行与定义为整数的variables,它的工作原理:
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
我不认为一个With
语句适合你共享的代码行,但是如果你使用一个,那么With
就会在定义你正在操作的对象的行的开头。 这是你的代码重写使用不必要的With
语句:
With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)) .ClearContents End With
With
语句旨在为您节省重新键入的代码,并使您的编码更易于阅读。 如果你用一个对象做多个事情,它变得有用和合适。 例如,如果您也想将列转为红色并添加厚黑色边框,则可以使用如下所示的With
语句:
With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)) .ClearContents .Interior.Color = vbRed .BorderAround Color:=vbBlack, Weight:=xlThick End With
否则,您将不得不声明每个操作或属性的范围,如下所示:
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
我希望这给你一个感觉,为什么Gary的学生相信编译器可能会期待一个With
(即使它不合适),以及一个With
如何以及何时可以在你的代码中有用。
我只是想出了清除整个表格的非常简单的方法。
Sub ClearThisSheet() ActiveSheet.UsedRange.ClearContents End Sub
在此之前,你需要一个With语句。 或者将细胞制成细胞
要清除所有有数据的行,我使用这样的两个variables。 我喜欢这个,因为如果你需要的话,你可以把它调整到一定范围的列。 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
问题不在于with语句,它是在Range函数中,它不接受绝对单元格值。它应该像Range(“A4:B100”)..你可以参考下面的线程来参考。 。
下面的代码应该工作.. 将单元格(1,1)转换为“A1”,反之亦然
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
我发现这是一种简单的方法,在所需的行和列之间进行清理。 我不知道这是你在找什么。 希望能帮助到你。
Sub sbClearCellsOnlyData() Range("A1:C10").ClearContents End Sub
对于像我这样的人,遇到这个问题,需要一个解决scheme,不清除标题,这里是一个class轮适合我:
ActiveSheet.Range("A3:A" & Range("A3").End(xlDown).Row).ClearContents
从第三排开始 – 改变你的喜好。