使用列引用在VBA中清除单元格内容

16

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

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

然而,在第一个 ".Cells" 部分,我遇到了一个错误,为什么会这样?

8个回答

31

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

例如:

Worksheets(sheetname).Columns(1).ClearContents 

应该清除 A 列的内容

如果您需要对行执行类似操作,还有 Worksheet.Rows 对象。


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

您可以在这里阅读有关 with 块的信息:Microsoft 帮助文档


2

对于像我一样遇到这种问题需要解决方案但又不想清除头信息的人,下面就是适用于我的一行代码:

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

从第三行开始 - 根据您的需求进行更改。


1
这似乎只到页面底部,而不是完全滚动到列的底部。 - tofutim
对我而言,这只能一直到行中的第一个空单元格。如果能有一种快速的方法可以一直到整行中最后一个非空单元格,那就太好了。 - FlorianH

1
正如Gary's Student提到的那样,您需要在代码中最初编写时删除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语句:

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可能会有用。


2
你需要将变量定义为Long类型,否则在超过32767行后会出现问题。 - Sam

1

我发现这是在所需的行和列之间清理形状的简单方法。我不确定这是否是您要寻找的内容。希望能有所帮助。

Sub sbClearCellsOnlyData()
Range("A1:C10").ClearContents
End Sub

1
我刚想出了一种非常简单的清除整个表格的方法。
Sub ClearThisSheet()

ActiveSheet.UsedRange.ClearContents

End Sub

0
清除所有有数据的行,我使用两个变量,如下所示。我喜欢这种方法,因为如果需要,可以将其调整到特定列范围内。 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

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

0

在此之前需要一个With语句。或将.Cells更改为Cells


我尝试去掉每个单元格前面的“.”,以获得以下代码: Worksheets(sheetname).Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents 但是出现了“应用程序定义错误或对象定义错误”的错误。使用 WITH 语句时应该放在哪里? - dojogeorge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接