2017-08-28 104 views
3

我是VBA初学者,所以下面可能是我错过的基本步骤。运行时错误424 - 范围对象中的文本属性

当您尝试编辑Range方法的Text属性,我不断收到

运行时错误424,所需的对象。

例如,对于以下代码:

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

这是设置范围的情况吗?

+3

文本是只读属性,使用'.Value'而不是'.Text'。 –

+1

无法写入只读属性。 https://msdn.microsoft.com/VBA/Excel-VBA/articles/range-text-property-excel但是,这可能应该引发1004错误,而不是424所需的对象。 –

+1

@DavidZemens刚刚尝试过它作为一个单行的子,它返回了424错误。我也会假设1004错误。 –

回答

3

运行时错误“424对象要求”是可以解释的,并且相信与否,实际上是有道理的。

Range.Text是只读的,所以你不能指定它;按理说应该有一个编译时错误抱怨分配的尝试,如:

使用无效的财产

或者

无法分配给只读属性

但是,因为Range.Text返回Variant而不是String,并且该属性是只读的,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暴露默认属性应该为初学者“变得更容易”。