在VBA Excel上使用"ClearContents"的两种方法,但1种工作正常.为什么?

Asr*_*ael 11 excel vba excel-vba

晚上好朋友:

我想到了两种方法来清除VBA项目的已定义范围的单元格中的内容(在MS Excel中):

  1. Worksheets("SheetName").Range("A1:B10").ClearContents
  2. Worksheets("SheetName").Range(Cells(1, 1), Cells(10, 2)).ClearContents

问题是第二种方式显示错误' 1004 '当我没有看当前的工作表"SheetName"(换句话说,当我没有"SheetName"作为ActiveSheet).

第一种方式在任何情况下都能完美运行.

为什么会这样?如何在没有此错误的情况下使用"第二种方式"?

tig*_*tar 14

这是因为你没有Cells(1, 1)使用工作表对象限定,同样适用于Cells(10, 2).要使代码工作,它应该看起来像这样:

Dim ws As Worksheet

Set ws = Sheets("SheetName")
Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents
Run Code Online (Sandbox Code Playgroud)

交替:

With Sheets("SheetName")
    Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With
Run Code Online (Sandbox Code Playgroud)

编辑:当从标准模块或用户窗体运行代码时,Range对象将从Cells对象继承工作表.如果您正在运行工作表代码模块中的代码,则还需要符合条件Range,如下所示:

ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents
Run Code Online (Sandbox Code Playgroud)

要么

With Sheets("SheetName")
    .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With
Run Code Online (Sandbox Code Playgroud)


Sid*_*out 11

那是因为你没有完全限定你的单元格对象.试试这个

With Worksheets("SheetName")
    .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With
Run Code Online (Sandbox Code Playgroud)

注意细胞之前的DOT?