在VBA Excel上的“ClearContents”有两种方法,但是1正常工作。 为什么?

晚上好朋友:

我记住了清除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)。

在任何情况下,第一种方式完美无瑕。

为什么会发生? 如何在没有这个bug的情况下使用“第二种方式”?

这是因为您没有使用工作表对象限定Cells(1, 1)也是如此。 为了使代码工作,它应该看起来像这样:

 Dim ws As Worksheet Set ws = Sheets("SheetName") Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents 

交替:

 With Sheets("SheetName") Range(.Cells(1, 1), .Cells(10, 2)).ClearContents End With 

编辑 :当从标准模块或用户窗体运行代码时,Range对象将从Cells对象inheritance工作表。 如果您正在从工作表代码模块运行代码,则还需要限定Range ,如下所示:

 ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents 

要么

 With Sheets("SheetName") .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents End With 

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

 With Worksheets("SheetName") .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents End With 

注意细胞之前的DOT?