VBA错误代码对象要求 – 有三重检查,但仍然无法正常工作
下面的粗体和斜体行继续回到我的“运行时错误'424':Object Required。我正在作为一个自学类的一部分,我已经检查了三倍,以确保我正确地input代码并且仍然返回这个错误,我试着在这里查看这个错误的其他例子,但是没有一个对这个实例有帮助,因为我还不知道代码。
谢谢!
Sub FirstArray() Dim Fruit(2) As String Fruit(0) = "Apple" Fruit(1) = "Banana" Fruit(2) = "Cherry" ***Range("A1").Text = "First Fruit: " & Fruit(1)*** Dim Veg(1 To 3) As String Veg(1) = "Artichoke" Veg(2) = "Broccoli" Veg(3) = "Cabbage" ***Range("B1").Text = "First Veg:" & Veg(1)*** Dim Flower() As String ReDim Flower(1 To 3) Flower(1) = "Azalea" Flower(2) = "Buttercup" Flower(3) = "Crocus" ***Range("C1").Text = "Final Flower:" & Flower(3)*** End Sub
您只需将.Text
更改为.Value
更改.Text .Value会修复它,但是如果您想知道“Object required”作为错误消息是否有意义,那么原因如下。
您知道隐式赋值的语法:
foo.Bar = 42
显式值分配语法仍然受支持,但已过时/不推荐使用:
Let foo.Bar = 42
该赋值调用foo
对象的Bar
属性的Property Let
访问器,该属性可能如下所示:
Public Property Let Bar(ByVal value As Long) internalBar = value End Property Public Property Get Bar() as Long Bar = internalBar End Property
在Range.Text
的情况下,该属性可能如下所示:
Public Property Get Text() As String Text = GetStringRepresentationOfValue End Property
注意没有Property Let
accessor,所以这个:
someRange.Text = "foo"
不合法,因为Text
属性不公开一个Property Let
访问器。
那么对象需要处理什么? 到达它。
但首先你需要知道什么是默认成员 。 你看每个类模块都可以定义一个“默认成员”。 按照惯例,对于成员通常是Item
属性的集合。
这意味着你是否这样做:
foo = myCollection.Item(12)
或者那个:
foo = myCollection(12)
你得到完全一样的foo
,完全一样的方式 – 两者是完全一样的 ,除了后者隐式调用默认成员 ,前者明确这样做。
类的默认成员由隐藏成员属性决定,只有在导出类模块并在文本编辑器中打开它时才能看到该成员属性。
Public Property Get Item(ByVal Index As Long) As Variant Attribute Foo.VB_UserMemId = 0 Item = internalCollection(Index) End Property
只有一个class级的成员可以是默认的。
那么错误信息是什么,当它看到这个:
foo.Bar = 42
并且知道Bar
是只显示Property Get
访问器的只读属性,那么这个代码合法的唯一方法就是如果Bar
返回一个具有可以被赋值的默认成员的对象。
由于Range.Text
返回一个String
而不是一个Object
,VBA抱怨对象是必需的 。
也许
Range("B1") = "First Veg:" & Veg(1)
同样的
Range("C1") = "Final Flower:" & Flower(3)