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

时间:2013-10-25 15:29:19

标签: excel vba excel-vba

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

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

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

8 个答案:

答案 0 :(得分:25)

您可以使用Worksheet.Columns对象

作为范围访问整个列

类似的东西:

Worksheets(sheetname).Columns(1).ClearContents 

应清除A栏的内容

如果你需要为行做类似的事情,还有Worksheet.Rows对象


您收到的错误可能是由于缺少了阻止。

您可以在此处阅读有关块的内容:Microsoft Help

答案 1 :(得分: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

否则你必须声明每个动作或属性的范围,如下所示:

With

我希望这能让你理解为什么Gary的学生认为编译器可能期望With(即使它不合适)以及{{1}}如何以及何时在你的代码中有用。

答案 2 :(得分:1)

我想出了一种清除整张纸的简单方法。

Sub ClearThisSheet()

ActiveSheet.UsedRange.ClearContents

End Sub

答案 3 :(得分:0)

在此之前,您需要 With 语句。或者将 .Cells 转换为单元格

答案 4 :(得分:0)

问题不在于with语句,它在Range函数上,它不接受绝对单元格值。它应该像Range(" A4:B100")。你可以参考以下帖子作为参考..

以下代码应该有效.. Convert cells(1,1) into "A1" and vice versa

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

答案 5 :(得分: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

答案 6 :(得分:0)

我发现这是一种简单的方法,可以在所需的行和列之间进行清洁。我不确定这是不是你想要的。希望它有所帮助。

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

答案 7 :(得分:0)

对于像我这样的人来说,遇到这个并且需要一个不清除标题的解决方案,这里有一个对我有用的衬垫:

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

从第三行开始 - 根据自己的喜好进行更改。