使用列参考清除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 

从第三排开始 – 改变你的喜好。