15

我正在尝试使用列引用获取一段代码来清除某些单元格中的数据。我正在使用以下代码:

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

要做到这一点,但是我在第一个 .Cells 部分遇到错误,这是为什么呢?

4

8 回答 8

29

您可以使用Worksheet.Columns对象将整个列作为范围访问

就像是:

Worksheets(sheetname).Columns(1).ClearContents 

应该清除A列的内容

Worksheet.Rows如果您需要对行做类似的事情,还有这个对象


您收到的错误可能是由于缺少 with 块。

您可以在此处阅读有关块的信息:Microsoft 帮助

于 2013-10-25T15:38:58.293 回答
2

对于像我这样遇到这种情况并需要一个不清除标题的解决方案的人来说,这是一个适合我的班轮:

ActiveSheet.Range("A3:A" & Range("A3").End(xlDown).Row).ClearContents

从第三行开始 - 根据您的喜好更改。

于 2017-03-28T00:22:47.313 回答
1

我刚刚想出了一个非常简单的清除整张纸的方法。

Sub ClearThisSheet()

ActiveSheet.UsedRange.ClearContents

End Sub
于 2015-03-08T21:20:07.457 回答
1

正如 Gary 的学生所提到的,您需要先删除该点才能Cells使代码按照您最初编写的方式工作。我不能确定,因为您只包含了一行代码,但是删除点时出现的错误可能与您定义变量的方式有关。

我用定义为整数的变量运行了你的代码行,它起作用了:

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 的学生认为编译器可能期望 a With(即使它不合适)以及 a 如何以及何时With在您的代码中有用。

于 2013-10-25T21:45:52.663 回答
0

问题不在于 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
于 2014-04-15T13:53:03.937 回答
0

在此之前您需要一个With语句。或者将.Cells变成Cells

于 2013-10-25T15:30:32.190 回答
0

为了清除所有有数据的行,我使用了两个这样的变量。我喜欢这个,因为如果需要,您可以将其调整为特定范围的列。将 CRow 调暗为整数 将 LastRow 调暗为整数

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
于 2015-06-16T04:55:28.553 回答
0

我发现这是一种在所需行和列之间清理形状的简单方法。我不确定这是否是您正在寻找的。希望能帮助到你。

Sub sbClearCellsOnlyData()
Range("A1:C10").ClearContents
End Sub
于 2016-07-27T21:25:37.743 回答