【问题标题】:Declare cells or range as variant in VBA [duplicate]在VBA中将单元格或范围声明为变体[重复]
【发布时间】:2019-12-06 17:46:47
【问题描述】:

这将是一个非常基本的问题。

我想将单元格声明为变体,以替代重复输入,例如

a = cells(1,1) 要么 a = range("a1")

那么 a.selecta.value, etc..

但发生错误

运行时 424

我想了解什么是问题,我该怎么做。

谢谢,

【问题讨论】:

  • 你必须声明一个范围然后设置它。喜欢Dim a as RangeSet a = .Range("A1")。运行时错误 424 告诉您没有声明范围对象。这里的关键字是Set,用于实际创建范围对象。
  • 您正在将单元格的值分配给一个变量,该变量没有 value 属性,无法选择。
  • 同样使用.Cells.Range 而不在工作簿和工作表中明确声明它们很容易出错。你应该看看stackoverflow.com/questions/10714251/…

标签: excel vba cell


【解决方案1】:

您遇到了 VBA 的一个有趣的“功能”——默认属性。 Excel 库中的大多数对象都有一个默认属性,在未指定属性的情况下使用该属性。在范围对象的情况下,默认属性是 Value 属性这意味着该行

    Range("A1") = 4

被VBA解释为意义

  Let Range("A1").Value = 4

在你的情况下,行

   a = cells(1,1)

最终被解释为

   Let a = range("a1").value

但是,你写了吗

   Set a = cells(1,1)

然后该设置强制 vba 将单元格 (1,1) 视为对象,因此将 a 设置为指向单元格 A1 的指针,这正是您想要的。

(如果 VBA 仍然坚持使用 Let 进行值分配,则不会出现混淆,因为您的原始行会因歧义而出错 - 但 Let 语句现在是可选的,因此如果您将其关闭,则不会出现错误)

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    相关资源
    最近更新 更多