12

朋友们晚上好:

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

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

问题是,当我没有查看当前工作表“SheetName”(换句话说,当我没有“SheetName”作为 ActiveSheet 时)时,第二种方式向我显示错误“ 1004 ”。

第一种方法在任何情况下都能完美工作。

为什么会这样?如果没有这个错误,我如何使用“第二种方式”?

4

3 回答 3

15

这是因为您没有Cells(1, 1)使用工作表对象进行限定,对于Cells(10, 2). 为了使代码正常工作,它应该如下所示:

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 对象继承工作表。如果您从工作表代码模块运行代码,则还需要限定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
于 2013-09-23T15:18:40.277 回答
11

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

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

注意 Cells 之前的 DOT 吗?

于 2013-09-23T15:16:44.440 回答
0

对于单元格的数字寻址,请尝试在 MS Excel 设置中启用 S1O1 复选框。它是顶部的第二个选项卡(即公式),位于我的匈牙利版本的页面中间位置。

如果启用,它将处理两种样式的 VBA 寻址,即 Range("A1:B10") 和 Range(Cells(1, 1), Cells(10, 2))。如果未启用,我假设它仅处理 Range("A1:B10") 样式。

祝你好运!

(注意,Range("A1:B10") 表示一个 2x10 的正方形,而 Range(Cells(1, 1), Cells(10, 2)) 表示 10x2。使用列号而不是字母不会影响寻址顺序.)

于 2018-02-02T20:54:36.507 回答