我是VBA初学者,所以下面可能是我错过的基本步骤。
尝试编辑Range方法的Text属性时,我一直在
运行时错误424,需要对象。
e.g。对于以下代码:
Range("A1").Text = "ABC"
这是设置范围的情况吗?
答案 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;使它更容易"适合初学者。