【问题标题】:2 ways for "ClearContents" on VBA Excel, but 1 work fine. Why? [duplicate]VBA Excel 上“ClearContents”的 2 种方法,但 1 可以正常工作。为什么? [复制]
【发布时间】:2013-09-28 13:32:27
【问题描述】:

朋友们晚上好:

我想到了两种方法来清除 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”。

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

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

【问题讨论】:

  • 不是为了积分,而是我的答案很难理解吗?
  • @pnuts:不,我不认为 :@tigeravatar 很绝望 :) 只是几分钟的差异 :)
  • 范围相关引用的默认范围:stackoverflow.com/questions/28439376/…

标签: excel vba


【解决方案1】:

这是因为您没有使用工作表对象限定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

【讨论】:

  • 您可能想在Range 之前添加ws.ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents
  • 同样为第二个代码.Range(.Cells(1, 1), .Cells(10, 2)).ClearContents添加一个点
  • + 1 用于合并建议:)
  • @SiddharthRout 很有趣,那么你们讨论的结果是什么?我自己做了一些测试(使用 xl2010),令我惊讶的是,我得到了与tigeravatar 相同的结果。然而,就我自己而言,无论是否必要,始终限定 Range 对象让我感觉更自在。
  • @DaveU 讨论的是错误发生的原因和方式。讨论的结果在答案的编辑中有详细说明:“当从标准模块或用户窗体运行代码时,Range 对象将从 Cells 对象继承工作表。如果您从工作表代码模块运行代码,您还需要限定 Range”
【解决方案2】:

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

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

注意到 Cells 之前的 DOT 了吗?

【讨论】:

    【解决方案3】:

    对于单元格的数字寻址,请尝试在 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。使用列号而不是字母不会影响寻址顺序。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 2015-05-03
      • 1970-01-01
      • 2016-01-16
      • 2016-05-04
      • 1970-01-01
      • 2011-08-29
      • 2016-10-26
      相关资源
      最近更新 更多