运行时错误424 - Range对象中的Text属性

时间:2017-08-28 17:06:10

标签: vba excel-vba excel

我是VBA初学者,所以下面可能是我错过的基本步骤。

尝试编辑Range方法的Text属性时,我一直在

  

运行时错误424,需要对象。

e.g。对于以下代码:

Range("A1").Text = "ABC"

这是设置范围的情况吗?

1 个答案:

答案 0 :(得分:3)

运行时错误" 424 Object Required"是可以解释的,不管你信不信,实际上是有道理的。

Range.Text是只读的,因此您无法分配给它;可以说应该有一个编译时错误抱怨分配尝试,例如:

  

无效使用财产

或者

  

无法指定只读属性

但是,由于Range.Text返回Variant而不是String,并且该属性为get-only,因此VBA假定分配合法,并且该属性将返回Variant/Object,其中Object具有可以分配的默认属性

所以在Sheet1的代码隐藏中分配此属性:

Public Property Get Foo() As String
    Foo = "FOO"
End Property

编译时是否无法分配给只读属性错误。

但是这个:

Public Property Get Foo() As Variant
    Foo = "FOO"
End Property

是否需要运行时对象错误 - 因为要使分配合法,Property Get函数预期才能返回对象。如果它没有,那么所需的对象是完全合理的。

考虑一下:

Public Property Get Foo() As Range
    Set Foo = ActiveCell
End Property

此属性与上述任何内容一样只读:您无法合法地重新分配引用Foo正在返回。

但这完全合法:

Sheet1.Foo = 42

事实上,这是隐含的代码:

Sheet1.Foo().Value = 42

因此,赋值将分配给返回的对象引用的已启用写入的默认属性

这个参考作业:

Set Sheet1.Foo = ActiveCell

编译时无效使用属性,因为Foo没有公开Set访问者。

这确实让初学者感到困惑。具有讽刺意味的是,VB6 / VBA暴露默认属性应该是#34;使它更容易"适合初学者。