【问题标题】:Excel VBA - Range.Clear does not clear cellExcel VBA - Range.Clear 不清除单元格
【发布时间】:2013-05-29 16:19:09
【问题描述】:

我的 VBA 中有以下函数,它试图清除 Excel Sheet1 中的单元格 A1,但它不清除内容并且还返回 False 作为输出:

Function test()
    Application.Volatile (False)    
    test = Worksheets("Sheet1").Range("A1:A1").Clear
End Function

另外请不要此时 Locked 属性为 True,即使我将其设为 False,如果我打印下一行,Locked 属性也为 True。

有什么建议吗?

谢谢

【问题讨论】:

  • 确切的代码适用于我。您还可以尝试使用 ClearContents 功能。但是,这似乎是您最后的另一个问题。锁定属性是什么意思?工作表/单元格是否受保护?在这种情况下,您必须通过提供密码来使用 unprotect 命令。
  • 工作表本身没有受到保护,并且之前使用的相同功能现在不起作用
  • 任何可能的原因的想法???
  • 你从哪里调用它——excel单元格(不起作用)或vba(任何其他子程序的立即窗口)?

标签: excel vba


【解决方案1】:
  1. VBA 中的函数通常是具有数据类型的变量。在您的示例中,缺少数据类型,这意味着数据类型设置为Variable
  2. 显然,您的数据类型恰好是布尔值,因此将函数设置为False
  3. 使用函数更改单元格内容是一种不好的风格。但是,您的代码作为 Sub 可以正常工作:

    Sub test()  
      Application.Volatile (False)  
      Worksheets("Sheet1").Range("A1:A1").Clear  
    End Sub
    

【讨论】:

  • 有趣。任何线索为什么它在被用作函数时对我有用?
  • 如果用作单元格公式,UDF 不能删除单元格内容。但是,如果在 VBE 中使用,用户可能会在发现某些单元格中的数据被不可逆转地覆盖时感到不愉快(运行 VBA 后撤消不起作用)。
【解决方案2】:

我不确定,但据我所知,您不能在 Function 中格式化 Excel 表格,而是我们可以使用 Subroutine 来完成。

Sub test()
  Worksheets("sheet1").Range("A1").Clear
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多