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

我试图用一段代码来清除一些单元格中的数据,使用列的引用。我正在使用下面的代码。

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

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

解决办法

你可以使用Worksheet.Columns对象将整个列作为一个范围来访问。

类似于这样的情况。

Worksheets(sheetname).Columns(1).ClearContents 

应清除A列的内容

如果你需要对行进行类似操作,还有一个Worksheet.Rows对象。


你所收到的错误可能是由于缺少一个与块。

你可以在这里阅读关于with块的信息。微软帮助

评论(0)

正如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'的学生认为编译器可能在期待一个With'(尽管它是不恰当的),以及With'如何以及何时在你的代码中有用。

评论(1)

在这之前你需要一个With语句。 或者把.Cells变成Cells

评论(1)